Пытаюсь разобраться с DMA в 5418: передается не то что нужно. Как сделать? Исходные данные:
CODE
//#1#################### Инициализация контактного последовательного порта #########################
void SerialContactInit(void)
{
P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL0 = 0;
UCA0CTL1 |= UCSSEL_2; // SMCLK
//для скорости 19200
UCA0BR0 = 54; // 1MHz 19200 (see User's Guide)
UCA0BR1 = 0;
UCA0MCTL = UCBRS_5 + UCBRF_0; // Modulation
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
//UCA0IE |= UCRXIE; // Запускаем прерывание на прием
__no_operation(); // For debugger
}
//#2##### Старт передачи данных по контактному адаптеру с использованием DMA #####################
void SerialContactTransmitDmaStart (void)
{
DMA0CTL |= DMAEN; // запуск передачи
}
//#2#####
void SerialContactTransmitDmaOn (void)
{
//Настройка DMA для передачи буфера
// канал DMA0 на передачу с USCIA0 transmit
DMACTL0 = DMA0TSEL_17;
DMACTL1 = 0;
DMACTL2 = 0;
DMACTL3 = 0;
DMACTL4 = 0;
// Single transfer; destination address unchanged;
// Передача по байтам;
// DMAEN - откл; DMA interrupt Disabled;
DMA0CTL = DMADT_0 + DMADSTINCR_0 + DMASRCINCR_3 + DMADSTBYTE + DMASRCBYTE + DMALEVEL;
// Адрес источника данных
DMA0SA = (char*)&SerialBuffer;
// Адрес приемника данных
DMA0DA = (char*)&UCA0TXBUF;
// Количество байтов
DMA0SZ = CountSerialByte;
}
void SerialContactTransmitDmaOff (void)
{
DMA0CTL = 0;
DMA0SA = 0;
DMA0DA = 0;
DMA0SZ = 0;
}
void preparationBuffer(void) //временная процедура для подготовки передачи данных
{
char i;
for(i = 0; i < 255; i++)
{
//*(char*)&SerialBuffer[i] = i;
SerialBuffer[i] = i;
SerialInputBuffer[i] = 0; //приемный буфер очищаем
}
__no_operation();
}
Готовлю массив от 0 до 0xFE - 255 байт на передачу. Запускаю и получается на выходе:
CODE
FDh FBh F9h F7h F5h F3h F1h EFh EDh EBh E9h E7h E5h E3h E1h DFh DDh DBh D9h D7h
D5h D3h D1h CFh CDh CBh C9h C7h C5h C3h C1h BFh BDh BBh B9h B7h B5h B3h B1h AFh
ADh ABh A9h A7h A5h A3h A1h 9Fh 9Dh 9Bh 99h 97h 95h 93h 91h 8Fh 8Dh 8Bh 89h 87h
85h 83h 81h 7Fh 7Dh 7Bh 79h 77h 75h 73h 71h 6Fh 6Dh 6Bh 69h 67h 65h 63h 61h 5Fh
5Dh 5Bh 59h 57h 55h 53h 51h 4Fh 4Dh 4Bh 49h 47h 45h 43h 41h 3Fh 3Dh 3Bh 39h 37h
35h 33h 31h 2Fh 2Dh 2Bh 29h 27h 25h 23h 21h 1Fh 1Dh 1Bh 19h 17h 15h 13h 11h 0Fh
0Dh 0Bh 09h 07h 05h 03h 01h FFh 3Fh 9Fh EEh EAh E6h E2h DEh DAh D6h D2h CEh CAh
C6h C2h BEh BAh B6h B2h AEh AAh A6h A2h 9Eh 9Ah 96h 92h 8Eh 8Ah 86h 82h 7Eh 7Ah
76h 72h 6Eh 6Ah 66h 62h 5Eh 5Ah 56h 52h 4Eh 4Ah 46h 42h 3Eh 3Ah 36h 32h 2Eh 2Ah
26h 22h 1Eh 1Ah 16h 12h 0Eh 0Ah 06h 02h FEh 1Fh 8Fh DCh D4h CCh C4h BCh B4h ACh
A4h 9Ch 94h 8Ch 84h 7Ch 74h 6Ch 64h 5Ch 54h 4Ch 44h 3Ch 34h 2Ch 24h 1Ch 14h 0Ch
04h FCh 0Fh 87h B8h A8h 98h 88h 78h 68h 58h 48h 38h 28h 18h 08h F8h 07h 83h 70h
50h 30h 10h F0h 03h 81h E0h 01h 00h
Почему передача ведется с конца массива, да еще и через байт?
Причина редактирования: Оформление цитаты исходника.