Jump to content

    

Recommended Posts

Доброго Здоровья! Имеется КИТ с 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. ПРОФИТ ? --- НЕТ!

 

В обработчике пытаюсь мигать светодиодом. Может я что-то упустил, может еще какой шаг должен быть?

 

Share this post


Link to post
Share on other sites

Капнул глубже. Выяснил, что при приеме байта флаг RXRDY регистра SCIRXST не устанавливается в единицу. Из-за чего это может быть? Причем FIFO работает нормально.

Share this post


Link to post
Share on other sites

Проблему решил, организовав прерывание по FIFO, по приему байта так и не выло: не встает. Всмысле, флаг не встает.

Когда допишу драйвер UART под TMS320F28 поделюсь со всеми желающими.

Share this post


Link to post
Share on other sites

Понимаю, что некропост. Но если память не изменяет- нет у TMS320F28xx прерывания по приему одного байта.

Вместо этого устанавливается уровень наполнения FIFO, на котором срабатывает прерывание. Никто не мешает установить этот уровень равным 1.

Edited by Misile_Inc

Share this post


Link to post
Share on other sites

Залез в даташит. Таки нет, у SCI два режима, в буферизированном режиме желаемое прерывание недоступно. В регистре SCIFFTX нужно сбросить бит SCIFFENA чтобы запустить режим, совместимый с ядром TMS320F24xx и должно быть вам счастье:)

Edited by Misile_Inc

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this