Перейти к содержанию
    

Прерывание SCI в TMS320F28

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Изменено пользователем Misile_Inc

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем Misile_Inc

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...