[an error occurred while processing this directive]
|
Программирую циклическую выдачу массива через порт SPORT2. DMA этого канала настраиваю для работы в режиме автозагрузки. Поскольку массив не меняется, то связи DMA с программой не имеется. Порт работает сам по себе, а все остальное само по себе.
В прочей части запрограммированы:
- UART (оба канала передающий и приемный работают с DMA в дескрипторном режиме);
- SPORT0 на прием запрограммирован для работы с DMA в режиме автобуферизации;
- обслуживание прерывания по флагу;
Прерывание по флагу имеет старший приоритет, UART - низший. Ну а SPORT2с ними никак не завязан.
Обнаружил в релизе, что периодически программа зависает. Т.е. прерывание на верхнем уровне продолжает обслуживаться. А на остальных уровнях останавливается. Верхний уровень и уровень SPORT2 контролирую осциллографом. Работа SPORT0 контролируется через UART. Поскольку UART перестает работать, то SPORT0 перестает контролироваться.
В процессе разбирательства с данной ситуацией запрограммировал аналогичную ситуацию на EZ-KIT. Тут запрограммировал только обслуживание прерывания по флагу (вместо флага задействовал таймер) и SPORT2. Ситуация повторилась:
- если прерывание по таймеру выключено, т.е. работает только SPORT2 и пустая фоновая программа, на выходе SPORT2 генерируется правильный поток чисел.
- если прерывание по таймеру включено, то на выходе SPORT2 поток генерируется в течение малого интерввала времени. А затем генерация прекращается. При останове программы контролирую состояние порта SPORT2 и его DMA. Программа высвечивает состояние 1000, а указатель адреса DMA показывает разные адреса в пределах выделенного буфера. Старшая единица в состоянии порта SPORT2 не документирована.
Помогите, пожалуйста, разобраться с ситуацией
E-mail: info@telesys.ru