Читайте также:
|
|
Начальная инициализация структуры данных для обработчика прерывания _IrqUART
Подключиться к обработчику прерывания от таймера
Начальная инициализация структуры данных для обработки запросов чтения – записи данных с UARTa _UARTInfo
Настроить CR регистры UARTов. Структура _RegUart.
Настроить MR регистры UARTов. Структура _RegUart.
Подключение к драйверу SPORTa на передачу данных в контроллер UART RS-422. Массив идентификаторов ID_DT_RS422[VRS_422]
Подключение к драйверу SPORTa на прием данных с контроллера UART RS-422
Массив идентификаторов ID_DR_RS422[VRS_422].
Подключение к драйверу SPORTa или на передачу, или на прием данных в контроллер UART RS-485. Массив идентификаторов ID_RS485[VRS_485].
Проинициализировать буфера чтения/записи данных для всех UARTов.
Подключение к драйверу SPORTa на запись регистров контроллера UARTа.
Идентификатор ID_RegTUart.
Подключение к драйверу SPORTa на чтение регистров контроллера UARTа.
Идентификатор ID_RegRUart.
Запись регистров CR в контроллер UARTa. Для этого выполнить обмен данных по SPI с идентификатором ID_TRegUart.
Запись регистров MR в контроллер UARTa. Для этого выполнить обмен данных по SPI с идентификатором ID_TRegUart.
Обработчик прерывания от таймера.
Начало
Если наступило время запуска драйвера UARTa 1-го уровня i
то {
1. Установить признак наличия прерывания
2. Увеличить счетчик прерывание на 1
3. Поставить запрос ядру на загрузку контекста драйвера UARTa 1- го уровня
}
Конец
Алгоритм работы драйвера UARTa 1-го уровня
While(1){
Цикл по всем UARTам{
Обработка UART i
Если произошло прерывание от UART (IRQ_UART = 1) и завершена обработка i-го UARTa (UART_HANDLE = 0) или для i-го UART установлен запрос на запись данных, {
Чтение 10 регистров SR с контролера UARTa
RegUart->SR
Если произошло прерывание от таймера
Установить для всех UART в структуре _UARTInfo запрос на обслуживание – бит UART_HANDLE_R.
}
Если для i-го UARTa в структуре_UARTInfo есть запрос на чтение данных, то{
Обработка SR i-го UARTa SR = B_SR[i];
Если число слов приемника > 0, то {
Считать с FIFO i-го UARTa n байт принятых данных. Обмен данными осуществляется по SPI
Если чтение данных завершено {
Проверить обмен по SPI на ошибки
Записать n байт в Буфер для чтения данных с i-го UARTa. Маркер для записи сдвинуть на n-байт.
}
Для i-го UARTa в структуре_UARTInfo сбросить запрос на обслуживание бит UART_HANDLE_R
}
Если для i-го UARTa установлен запрос на запись данных (бит UART_HANDLE_W в структуре _UARTInfo){
Обработка SR i-го UARTa SR = RegUart->SR[i];
Определить сколько байт NB_FREE можно записать в FIFO UART i (Обработка регистра SR i).
Считать из буфера для записи данных i-го UARTa NB_FREE байт или пока Маркер чтения не будет равен Маркеру записи.
Записать полученные байты данных в SPI.
Если запись данных завершена {
Проверить обмен по SPI на ошибки
}
}
Переход к следующему UARTу
}// end Цикл по всем UARTам
}//end while(1)
Заключение
Драйвер UARTa 1-го уровня осуществляет передачу данных между буферами чтение/записи UARTов и FIFO контроллера UARTa.
Для записи данных в FIFO i-го UARTa драйвер выполняет следующий действия:
· определяет сколько байт можно записать в FIFO i-го UARTa;
· считывает столько же байт с буфера записи данных i-го UARTa или пока Маркер чтения не будет равен Маркеру записи;
· записывает считанные байты данных в FIFO i-го UARTa.
Для чтения данных с FIFO i-го UARTa драйвер выполняет следующий действия:
· определяет сколько байт поступило в FIFO i-го UARTa;
· считывает столько же байт с FIFO i-го UARTa;
· записывает считанные байты в Буфер для чтения данных с i-го UARTa или или пока Маркер чтения не будет равен Маркеру записи.
Дата добавления: 2015-12-08; просмотров: 48 | Нарушение авторских прав