Мозг отказывается мне служить.
С помощью ДМА загружаю с определенной частотой 16-битный регистр из области памяти.
Так вот, когда канал работает как источник Increment - все нормально, только пытаюсь сделать источник Decrement, полная Ж.
из 192 значений - несколько неправильно, всегда в одном месте, без какой то системы. Только в старшем байте слова один бит меняется.
Кусок кода для отладки.
Код:
|
DMA.CH1.SRCADDR2 = 0x80;
DMA.CH1.DESTADDR2 = 0;
DMA.CH1.TRIGSRC=DMA_CH_TRIGSRC_TCC1_OVF_gc;
DMA.CH1.CTRLB=0;
DMA.CH1.REPCNT=0;
DMA.CH1.CTRLA=DMA_CH_SINGLE_bm|0x01;
DMA.CH1.ADDRCTRL=DMA_CH_SRCDIR_DEC_gc|DMA_CH_SRCRE LOAD_TRANSACTION_gc|DMA_CH_DESTDIR_INC_gc|DMA_CH_D ESTRELOAD_BURST_gc;
DMA.CH1.TRFCNT=192*2;
DMA.CH1.DESTADDR0 = ((unsigned short)&angle)&0xff;
DMA.CH1.DESTADDR1 = (((unsigned short)&angle)››8)&0xff;
DMA.CH1.SRCADDR0 = (((unsigned short)(&table_dma_l[0]))+191*2)&0xff;
DMA.CH1.SRCADDR1 = ((((unsigned short)(&table_dma_l[0]))+191*2)››8)&0xff;
TDMA.INTCTRLA=0x02;
TDMA.CTRLA=TC_CLKSEL_DIV1024_gc;
TDMA.PER=125; |
Далее в программе переменная angle выводится в порт.
При инкременте все нормально.
Вот то что в памяти
0262 026e 0278 0282 028c 0296 02a0 02aa 02b2 02bc 02c4 02cc 02d4 02dc 02e2 02ea
02f0 02f6 02fc 0300 0306 030a 030e 0312 0314 0318 031a 031c 031e 031e 031e 0320
0320 031e 031e 031e 031c 031a 0318 0314 0312 030e 030a 0306 0300 02fc 02f6 02f0
02ea 02e2 02dc 02d4 02cc 02c4 02bc 02b2 02aa 02a0 0296 028c 0282 0278 026e 0262
0258 024c 0240 0234 0228 021c 0210 0204 01f6 01ea 01de 01d0 01c4 01b6 01aa 019c
0184 0176 016a 015c 0150 0142 0136 012a 011c 0110 0104 00f8 00ec 00e0 00d4 00c8
00be 00b2 00a8 009e 0094 008a 0080 0076 006e 0064 005c 0054 004c 0044 003e 0036
0030 002a 0024 0020 001a 0016 0012 000e 000c 0008 0006 0004 0002 0002 0002 0000
0000 0002 0002 0002 0004 0006 0008 000c 000e 0012 0016 001a 0020 0024 002a 0030
0036 003e 0044 004c 0054 005c 0064 006e 0076 0080 008a 0094 009e 00a8 00b2 00be
00c8 00d4 00e0 00ec 00f8 0104 0110 011c 012a 0136 0142 0150 015c 016a 0176 0184
019c 01aa 01b6 01c4 01d0 01de 01ea 01f6 0204 0210 021c 0228 0234 0240 024c 0258
Вот то что записывает ДМА
0258 024c 0240 0234 0228 021c 0210
0104 01f6 01ea 01de 01d0 01c4 01b6 01aa 019c
0184 0176 016a 015c 0150 0142 0136 012a 011c 0110
0004 00f8 00ec 00e0 00d4 00c8
00be 00b2 00a8 009e 0094 008a 0080 0076 006e 0064 005c 0054 004c 0044 003e 0036
0030 002a 0024 0020 001a 0016 0012 000e 000c 0008 0006 0004 0002 0002 0002 0000
0000 0002 0002 0002 0004 0006 0008 000c 000e 0012 0016 001a 0020 0024 002a 0030
0036 003e 0044 004c 0054 005c 0064 006e 0076 0080 008a 0094 009e 00a8 00b2 00be
00c8 00d4 00e0 00ec
01f8 0104 0110 011c 012a 0136 0142 0150 015c 016a 0176 0184
019c 01aa 01b6 01c4 01d0 01de 01ea
02f6 0204 0210 021c 0228 0234 0240 024c 0258
0262 026e 0278 0282 028c 0296 02a0 02aa 02b2 02bc 02c4 02cc 02d4 02dc 02e2 02ea
02f0 02f6
03fc 0300 0306 030a 030e 0312 0314 0318 031a 031c 031e 031e 031e 0320
0320 031e 031e 031e 031c 031a 0318 0314 0312 030e 030a 0306
0200 02fc 02f6 02f0
02ea 02e2 02dc 02d4 02cc 02c4 02bc 02b2 02aa 02a0 0296 028c 0282 0278 026e
0062
Жирным то что изменилось. Вроде все выделил.
Явно глюк при доступе к памяти, но почему только при декременте?
Или я где то туплю?
Кто бы наставил на путь истинный - перешел бы на СТМ.