ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
23 ноября
753297 Топик полностью
Ксения (01.05.2017 01:49 - 01:56, просмотров: 302) ответил Idler на Сразу включать DMA_CH_ENABLE_bm нельзя!
Несомненно! 1. Моя ошибка, исправила. 2. Переправила на =. 3. В IAR прерывание именно так и описываются (через #prаgma перед функцией). А это зарезервированные имена, которые можно для этой цели использовать: /* DMA interrupt vectors */ #define DMA_CH0_vect 0x0018 /* Channel 0 Interrupt */ #define DMA_CH1_vect 0x001C /* Channel 1 Interrupt */ #define DMA_CH2_vect 0x0020 /* Channel 2 Interrupt */ #define DMA_CH3_vect 0x0024 /* Channel 3 Interrupt */ Я использовала DMA_CH0_vect, ассемблер тоже вроде нормальный откомпилировался: __interrupt void isrDMA0() \ isrDMA0: { \ 00000000 93FA ST -Y, R31 \ 00000002 93EA ST -Y, R30 \ 00000004 933A ST -Y, R19 \ 00000006 932A ST -Y, R18 \ 00000008 931A ST -Y, R17 \ 0000000A 930A ST -Y, R16 \ 0000000C B71F IN R17, 0x3F \ 0000000E B72B IN R18, 0x3B Flag |= Flag_DMA; \ 00000010 .... LDI R30, LOW(TestFreq) \ 00000012 .... LDI R31, (TestFreq) >> 8 \ 00000014 E030 LDI R19, 0 \ 00000016 BF3B OUT 0x3B, R19 \ 00000018 A500 LDD R16, Z+40 \ 0000001A 6800 ORI R16, 0x80 \ 0000001C A700 STD Z+40, R16 DMA.INTFLAGS |= DMA_CH0TRNIF_bm; \ 0000001E E0E3 LDI R30, LOW(259) \ 00000020 E0F1 LDI R31, (259) >> 8 \ 00000022 8100 LD R16, Z \ 00000024 6001 ORI R16, 0x01 \ 00000026 8300 ST Z, R16 } \ 00000028 BF2B OUT 0x3B, R18 \ 0000002A BF1F OUT 0x3F, R17 \ 0000002C 9109 LD R16, Y+ \ 0000002E 9119 LD R17, Y+ \ 00000030 9129 LD R18, Y+ \ 00000032 9139 LD R19, Y+ \ 00000034 91E9 LD R30, Y+ \ 00000036 91F9 LD R31, Y+ \ 00000038 9518 RETI Не поняла только, зачем он в 0x3B по дороге нулик пишет. 4. У меня на плате старая ATxmega128A1 еще без USB, но и канал АЦП мне нужен только один, а потому проблемы с этим возникнуть не должно. 5. Правильно ли я поняла, что бит DMA_CH0TRNIF_bm в регистре DMA_INTFLAGS по завершении задания установится все равно, даже если я прерывания не разрешала? 6. Ура! Даже не ожидала этого - думала, что раз уж TRFCNT в следующий раз не перезагружаем, то он всегда постоянный.