shamrel 0 12 июля, 2012 Опубликовано 12 июля, 2012 · Жалоба Доброго Здоровья! Имеется КИТ с TMS320F28069, задача -- завести UART на прерываниях под DSP/BIOS. Без прерывания отправка и прием данных происходит. "hello world" шлет. Однако, прерывание не работает. Изучив документацию получил следующий алгоритм (Активен SCI-A, прерывание на прием. ): 1. Настраиваем соответствующие GPIO под работу с SCI: 1.1. Включаем подтягивающие резисторы на линии Rx и Tx. (регистр GPAPUD). 1.2. Включаем какую-то квалификацию: GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3; // Asynch input GPIO28 (SCIRXDA) 1.3. Переключаем пины на функцию SCI (GPAMUX2). 1.4. Наверное стоит подать такты на SCI (PCLKCR0). 2. Запрещаем все прерывания и инициализируем PIE-vector. 2.1. Запрещаем все прерывания (DINT (INTM = 1)). 2.2. Запрещаем PIE. (PIECTRL.ENPIE). 2.3. Очищаем все PIEIER регистры, то есть запрещаем все прерывания от периферии по отдельности. 2.4. Очищаем все флаги прерываний PIE (PIEIFR) 2.5. Запрещаем все прерывания в регистре IER, а также очищаем все соответствующие флаги IEF. 2.6. Копируем таблицу векторов прерывания из флешь в ОЗУ. 2.7. разрешаем PIE. (PIECTRL.ENPIE). 3. Инициализируем SCI 3.1. Устанавливаем режим работы (число бит в посылке, количество стоп-бит, контроль четности ): SCICCR = 0x07; 3.2. Отключаем спящий режим, включаем Rx и Tx: SCICTL1 = 0x03; 3.3. Включаем прерывание от Rx и Tx: SCICTL2 = 0x03; 3.4. Настраиваем скорость UART: SCIHBAUD = 0x01; SCILBAUD = 0x24; 3.5. Настраиваем FIFO. SCIFFTX = 0xE040; SCIFFRX = 0xE040; -- после данных назначений FIFO удерживается в сброшенном состоянии. 3.6. Отключаем режим автоопределения скорости (SCIFFCT) 3.7. Разрешаем SCI: SCICTL1 = 0x23; 3.8. Выводим FIFO из сброшенного состояния (SCIFFTX, SCIFFRX, биты TXFIFOXRESET и RXFIFORESET) 4. Настраиваем PIE на работу с SCI. 4.1. В регистре разрешения PIE устанавливаем в нулевом бите единичку: PIEACK | = 0x0001; 4.2. В регистре PIEIER9 устанавливаем соответствующий бит (нулевой). 4.3. В регистре IER устанавливаем нулевой бит. 4.4. Разрешаем глобальные прерывания (EINT). 5. Натравливаем BIOS на соответствующий обработчик прерывания (функция sci_rx_int_A() ). В файле *tcf добавляем ссылку на функцию обработчика прерывания: bios.PIE.instance("PIE_INT9_1").useDispatcher = 1; bios.PIE.instance("PIE_INT9_1").interruptMask0 = "all"; bios.PIE.instance("PIE_INT9_1").fxn = prog.extern("sci_rx_int_A"); bios.PIE.instance("PIE_INT9_1").monitor = "Nothing"; 6. ПРОФИТ ? --- НЕТ! В обработчике пытаюсь мигать светодиодом. Может я что-то упустил, может еще какой шаг должен быть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shamrel 0 12 июля, 2012 Опубликовано 12 июля, 2012 · Жалоба Капнул глубже. Выяснил, что при приеме байта флаг RXRDY регистра SCIRXST не устанавливается в единицу. Из-за чего это может быть? Причем FIFO работает нормально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shamrel 0 14 июля, 2012 Опубликовано 14 июля, 2012 · Жалоба Проблему решил, организовав прерывание по FIFO, по приему байта так и не выло: не встает. Всмысле, флаг не встает. Когда допишу драйвер UART под TMS320F28 поделюсь со всеми желающими. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Misile_Inc 0 5 декабря, 2012 Опубликовано 5 декабря, 2012 (изменено) · Жалоба Понимаю, что некропост. Но если память не изменяет- нет у TMS320F28xx прерывания по приему одного байта. Вместо этого устанавливается уровень наполнения FIFO, на котором срабатывает прерывание. Никто не мешает установить этот уровень равным 1. Изменено 5 декабря, 2012 пользователем Misile_Inc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Misile_Inc 0 5 декабря, 2012 Опубликовано 5 декабря, 2012 (изменено) · Жалоба Залез в даташит. Таки нет, у SCI два режима, в буферизированном режиме желаемое прерывание недоступно. В регистре SCIFFTX нужно сбросить бит SCIFFENA чтобы запустить режим, совместимый с ядром TMS320F24xx и должно быть вам счастье:) Изменено 5 декабря, 2012 пользователем Misile_Inc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться