我用的是野火的库,里面没有我们能用的关于AD 触发DMA的程序,,今年搞了一天啊,真心苦逼,,感觉都设置对了就是不出数据,这个是很蛋疼的事情啊,说说我配置过程出现的问题吧。。希望对大家有用,首先要用ad采集128个点,这个就不能让adad的配置肯定要设置好!!关键一点的是要使能ad的DMA(基本上和单独ad的设置差不多唯一这点要注意)芯片手册上有(不好截屏),然后再在野火的关于DMA配置的基础上把关于GPIO触发的删掉(或者直接无视)关键一点触发源要改为ADC的
修改触发源的地方:/* 配置 DMA 触发源 */
#if defined(MK60DZ10)
DMAMUX_CHCFG_REG(DMAMUX_BASE_PTR, CHn) = (0
#elif defined(MK60F15)
DMAMUX_CHCFG_REG(DMAMUX0_BASE_PTR, CHn) = (0
#endif
| DMAMUX_CHCFG_ENBL_MASK /* Enable routing of DMA request */
//| DMAMUX_CHCFG_TRIG_MASK /* Trigger Mode: Periodic PIT周期触发传输模式 通道1对应PIT1,必须使能PIT1,且配置相应的PIT定时触发 */
| DMAMUX_CHCFG_SOURCE( 触发源标号)该这个标号即可
//dma_portx2buff_init(DMA_CH0, PTB_B0_IN, buff, PTA7, DMA_BYTE1, 10, DADDR_RECOVER);
//4003_B010 //DMA初始化,源地址:PTB_B0_IN,目的地址:buff,PTA7触发(默认上升沿),
每次传输1字节,共传输 10次 ,传输结束后恢复地址PS原地址用adc的地址,不着知道具体的用取地址&ADC0_RA或&ADC0_RB,用软件触发ad用&ADC0_RA,用硬件用这个&ADC0_RB)
,配置好DMA之后使能DMA(记得)都配置好后,等曝光时间一到开始采集,采集完了触发DMA,DMA这里我用的是查询法(没有用中断感觉中断不好)
if(DMA_IsComplete())//DMA传输完成
{
DMA_TCD0_CSR&= 0x7f;//清楚标准位(一定要清楚不然一直触发,上位机数据不动)
SendImageData(CCD_BUFF[0]);//上微机查看波形很好,,,,,,配置完成啦
}
然后就是重新配置DMA使能,,,,重新曝光采集DMA传输。。。。
|