您好!
帮助了解问题。 通过 DMA 从 ADC 传输数据在位设置"GIE"时不起作用。
在程序的结果文本和全局中断禁用//"_bis_SR_register (GIE+LPM0_Bits)"中、所有操作都正常。
在中断解决时、包含"_ bis_SR_register (GIE)"行、不会传输数据。 中断的发生和处理。 但数据迁移不存在。
对于构成的测试、线路"_ bis_SR_register (LPM0_bits)";在这种情况下、数据传输中断会发生、但对我来说、传输中断不会发生。 如何绕过它? 我不是真的。 在 slau208q 中、被告知所有器件都应在任何模式下工作。 不清楚的是、在没有数据的情况下、为什么会有中断 DMA?
文本测试程序:
int main( void ){ WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器 //模拟单元的配置 OA0CTL0|=OAM; OA1CTL0|=OAM; OA0PSW|=PSW0; OA1PSW|=PSW0; OA0NSW|=NSW0; OA1NNSW|=NSW0; P6SEL|=BIT4+BIT5; P7SEL|=BIT4+BIT5+BIT6+BIT7; //REF 配置 REFCTL0|=REFON+REFOUT; P5SEL|=BIT0; //配置 ADC CTSD16CTL|=CTSD16REFS; CTSD16INCTL0|=CTSD16INCH_15+CTSD16GAIN_16; volatile int AdcWave1 [31]; unsigned int i; //Configuration DMA DMACTL0=DMA0TSEL_24;//DMA 0触发器选择 CTSD16。 __data20_write_long ((unsigned int)&DMA0SA、(unsigned long)&CTSD16MEM0); __data20_write_long (unsigned int)&DMA0DA、(unsigned long)&AdcWave1); DMA0SZ = 31; DMACTL4|=DMARMWDIS; DMA0CTL|=DMADD_0|DMADSTINCR_3|DMAIE; DMA0CTL&&~DMAIFG; DMA0CTL|=DMAEN; CTSD16CCTL0|=CTSD16SC; //启动 ADC
_bis_SR_register (GIE+LPM0_bits);//so works //_bis_SR_register (GIE);// SO NOT works } #pragma vector=dma_vector __interrupt void Interrupt_dma (void) { unsigned int mem=DMAIV; switch (mem){ case 0x0:{break; }case 0x2:{case:} DMA0CTL&=~DMAIE; CTSD16CCTL0&=~CTSD16SC; //停止 ADC 中断; } 案例0x4:{break;} 案例0x6:{break;} 案例0x8:{break;} 案例0xA:{break;} 案例0xC:{break;} 案例0xE:{break;} 案例0x10:{break;} }} 返回; }