折腾了一下午,总算是把 LPC1549 的DAC 调出来了,12位deAD,就一个通道。
虽然手上有例程,原版是这样的:
int main(void)
{
uint32_t *pulSrc_addr;
uint32_t *pulDest_addr;
uint32_t i;
SystemCoreClockUpdate();
GPIOInit(); /* 时能GPIO时钟,关闭复位 */
GPIOSetDir(LED_PORT, LED1, 1); /* 设置PI00.3成输出 */
GPIOSetDir(LED_PORT, LED2, 1); /* 设置PI00.4成输出 */
GPIOSetBitValue(LED_PORT,LED1,LED_OFF); /* 关闭所有LED */
GPIOSetBitValue(LED_PORT,LED2,LED_OFF);
#if DAC_DMA_ENABLE
/* Initialize DMA */
DMA_Init();
pulSrc_addr = (uint32_t *)DMA_SRC;
for ( i = 0; i < DAC_DMA_SIZE/4; i++ )
{
*pulSrc_addr++ = (i<<4) & 0xFFFFFFFF;
}
CHANNEL_DESCRIPTOR(DMAREQ_DAC)->Src = (uint32_t)(DMA_SRC + DAC_DMA_SIZE -4);
CHANNEL_DESCRIPTOR(DMAREQ_DAC)->Dst = (uint32_t)(&LPC_DAC->VAL);
CHANNEL_DESCRIPTOR(DMAREQ_DAC)->Link = (uint32_t)0x0;
LPC_DMA_CH(DMAREQ_DAC)->CFG = CFG_PERIPHREQEN;
LPC_DMA_CH(DMAREQ_DAC)->XFERCFG = XFERCFG_CNT(DAC_DMA_SIZE/(0x1<
| XFERCFG_WIDTH(WIDTH32) | XFERCFG_CFGVALID;
/* Enable DMA channels */
LPC_DMA->ENABLESET0 = 0x01<
/* Initialize DAC */
DACDMAInit( 0x1 );
#else
/*
* Initialize DAC. DAC output increments based on the trigger, either timed or external, inside the DAC handler.
*/
#if TIMER_TRIG_ENABLED
DACInit( 0x10 ); /* 每次DAC产生中断的时间 */
#else
/* if timer trigger is not enabled, parameter has no use. */
DACInit( 0 );
#endif
LPC_DAC->CTRL |= DAC_BIAS(0); /* 配置DAC控制器 */
#endif
/*
* 每次DAC转换完成会产生中断,在中断中增加DAC的转换值
*/
while(1) {
GPIOSetBitValue(LED_PORT,LED1,LED_ON); /* 打开的LED1 */
myDelay(1); /* 延时0.5s */
GPIOSetBitValue(LED_PORT,LED1,LED_OFF); /* 关闭的LED1 */
myDelay(1);
GPIOSetBitValue(LED_PORT,LED2,LED_ON); /* 打开的LED2 */
myDelay(1);
GPIOSetBitValue(LED_PORT,LED2,LED_OFF); /* 关闭的LED2 */
myDelay(1);
}
}
/*********************************************************************************************************
End Of File
*********************************************************************************************************/
这个效果是怎么样的我也不知道,因为调不出来,最后实在是弄不下去了,开始自己改,然后然后然后就得了............
没用 DMA ,就单纯的DAC,做了个简单到爆的信号发生器,暂且算是吧
可以输出的最高频率是 7点多K,当然也不是7k以内的就可以任意输出...............哈哈 不要在意细节,呀
修改之后的程序是这样的
int main(void)
{
uint32_t j=0,k=1;
SystemCoreClockUpdate();
DACInit( 0x01 ); /* 每次DAC产生中断的时间 */
LPC_DAC->VAL = (0x2ff << 4) & 0x0000FFFF;
while(1)
{
LPC_DAC->VAL = (j << 4) & 0x0000FFFF;
if(k==1)
j += 0xf;
else if(k==0)
j -= 0xf;
if(j>0xfff)
k = 0;
if(j<=0)
k = 1;
}
}