[an error occurred while processing this directive]
|
Сначала инициализирую порт. (При одиночных передачах он точно работает).
Потом инициализирую контроллер DMA:
InitSPORT1_RX_DMA:
IOPG = SPORT1_Controller_Page;
// В памяти создаю дескриптор по адресу RX_DMA_Descr0.
// RX_DMA_Descr1 - пустой.
ar=0;
dm(RX_DMA_Descr1)=ar;
// Устанавливаю направление передачи, очищаю буфер DMA
ar= 0x0082;
io(SP1DR_CFG) = ar;
// Инициализирую дескриптор RX_DMA_Descr0
// Указатель на следующий пустой дескриптор
ar = RX_DMA_Descr1;
dm(RX_DMA_Descr0 + 4) = ar;
// Размер приемного буфера
ar = LENGTH(Mem_Buf);
dm(RX_DMA_Descr0 + 3) = ar;
// Адрес приемного буфера
ar = Mem_Buf;
dm(RX_DMA_Descr0 + 2) = ar;
// Страница буфера - 0
ar = 0;
dm(RX_DMA_Descr0 + 1) = ar;
// Управляющее слово
ar = 0x8007;
dm(RX_DMA_Descr0) = ar;
// Загружаем адрес дескриптора в регистр SP1DR_CP
ar = RX_DMA_Descr0;
io(SP1DR_CP) = ar;
// Ставим, что дескриптор готов
ar=0x0001;
io(SP1DR_CPR) = ar; // DMA Descriptor Ready
// Запускаем передачу
ar = 0x0003;
io(SP1DR_CFG) = ar; // Run transfer
RTS;
После этого запускаю SPORT1.
Передача данных не идет, в регистре SP1DR_CFG - 0x0024 - совсем непонятное значение.
Кто-нибудь, скажите, что я делаю не так?
Или пример рабочего куска программы.
E-mail: info@telesys.ru