В отличие от процессора цифровой обработки сигналов 1967ВН028, процессоры 1967ВН034/044 обладают куда более широким набором периферийных блоков: UART, SPI, SSI, МКИО, ARINC и даже контроллеры интерфейсов ЖКИ и видеокамеры. В наше распоряжение попал отладочный комплект 1967ВН044, точнее плата, на которую установлен процессор (модуль процессора для микросхемы 1967ВН044). К сожалению, чтобы протестировать контроллеры ЖКИ, видеокамеры, нужны дополнительные модули к нашей плате. Поэтому, для начала и с имеющимися ресурсами, попробуем протестировать UART.
На процессорном модуле, используется микросхема FT232RL (Спецификация на микросхему доступна здесь), которая выполняет функцию преобразования USB ↔ UART. Поэтому, не задумываясь берём шнур USB A - USB B и подключаем: на плате разъём XS7 и к PC. Также подсоединяем, как обычно, отладчик - разъём XP5 и подсоединяем питание разъём XP1 (НО плату пока не включаем (тумблер SA2)).
Переходим к среде CM-LYNX. Тут все как обычно: создали новое рабочее пространство (workspace), а затем File->New->Project.... Подключаем библиотеку HAL, как описывалось в одной из предыдущих статей статей. Будем использовать библиотеку 1967VN044, так как по заявлению разработчиков, эта версия является более актуальной. Соответственно, располагается библиотека по следующему пути: \CM-LYNX\…\toolchain\1967VN044.
Сразу приведём пример кода с небольшими комментариями:
// main.c #include <hal_1967VN044.h> //Данные для посылки uint8_t ucTestText[ ] = { 'H', 'e', 'l', 'l', 'o', ' ', 'f', 'r', 'o', 'm', ' ', '1', '9', '6', '7', 'V', 'N', '0', '4', '4', 0x0D, 0x0A }; int main(void) { //Объявление структуры UART_Init_type UARTInit; //Применение стандартных настроек UART HAL_UART_DefaultInitStruct( &UARTInit ); //Используем порт А2 и А3 как альтернативную функцию HAL_GPIO_Init( LX_GPIO_PA, GPIO_PIN_2 | GPIO_PIN_3, GPIO_PinMode_Alt ); //Настройка UART1 HAL_UART_Init( LX_UART1, &UARTInit ); //Разрешение прерываний UART1 HAL_UART_ITEnable( LX_UART1 ); //Глобальное разрешение прерываний HAL_Interrupt_GlobalEnable(); while( 1 ) { //Отправка данных HAL_UART_ITSend( LX_UART1, ucTestText, 22 ); //Ожидание передачи всех данных while( !UartTxRxStatus.TxReady[ UART1 ] ); } }
Отдельно приведём функцию стандартных настроек UART:
void HAL_UART_DefaultInitStruct( UART_Init_type* InitStruct ) { InitStruct->BitRate = 9600; //скорость работы интерфейса в битах InitStruct->WorkMode = UART_Mode_TxRx; //режим работы (передатчик, приемник, трансивер) InitStruct->OverSampling = UART_OverSampling_Normal; //Количество синхросигналов на один бит информации InitStruct->WordLength = UART_WordLen_8bit; //Длина передаваемых данных InitStruct->StopBits = UART_Stop_1bit; //Количество стоп-битов InitStruct->ParityMode = UART_Parity_Off; //Управление режимом проверки четности InitStruct->FIFOSize = UART_FIFOSize_8Byte; //Размер FIFO приемника и передатчика InitStruct->TXDMode = UART_TXD_Direct; //Управление режимом работы линии TXD InitStruct->DMACtrlErr = UART_DMACtrl_Dis; //Управление запросом к контроллеру DMA во время обнаружения ошибки приема }
Теперь компилируем проект, включаем питание платы (SA2), создаем конфигурацию отладки и переходим в перспективу Debug. Запускать программу пока рано, нам необходимо воспользоваться терминальной программой для принятия данных. Будем использовать PuTTY, загрузить её можно отсюда. При запуске программы открывается окно PuTTY Configuration (слева указана категория - Session). Первоначально необходимо задать Connection type: Serial. Следующим шагом указываем наш COM-порт в поле Serial line : COM9 (в моём случае) и задаем скорость - она равна 9600 это стандартное значение, его мы задавали в функции HAL_UART_DefaultInitStruct ().
Теперь открываем COM-порт (open), возвращаемся в CM-LYNX в открытую перспективу Debug и нажимаем "play" или клавишу F8
И процессор бесконечно нас приветствует!
Чтобы выводить информацию по UART с помощью printf () необходимо добавить описание стандартной функции fputc ().
Основная статья -printfuart.
int fputc(int ch, FILE *f) { HAL_UART_Send (LX_UART1, (uint8_t *) &ch, 1); return ch; }