本帖最后由 FSL_TICS_Robin 于 2014-11-27 10:24 编辑
/// ¶¨Ê±Æ÷1³õʼ»¯,µ¥Î»£ºus
void PIT1_Init(uint8_t pit,uint32_t time)
{
GetProcessorInfo(); //¼ÆËãϵͳʱÖÓ
time=time*(PInfo.BusClock/1000000);
//¿ªÊ¼¶¨Ê±Æ÷ÅäÖÃ
SIM->SCGC6|=SIM_SCGC6_PIT_MASK;//¿ªÆôpitÄ£¿éʱÖÓ£¬¼û²Î¿¼ÊÖ²á269Ò³
PIT->MCR&=~PIT_MCR_MDIS_MASK; //¿ªÆôpitÄ£¿é£¬¼û²Î¿¼ÊÖ²á974Ò³
PIT->MCR|=PIT_MCR_FRZ_MASK; //¿ªÆôpitÄ£¿é£¬¼û²Î¿¼ÊÖ²á974Ò³
PIT->CHANNEL[pit].LDVAL=(uint32_t)time;//ÉèÖÃÑÓʱʱ¼ä£¬¼û²Î¿¼ÊÖ²á975Ò³
DA_COUNT=0;
//¿ªÆôÄں˽ÓÊÜÖжÏ
switch(pit)
{
case 1:
NVIC_EnableIRQ(PIT1_IRQn);
break;
}
PIT->CHANNEL[pit].TFLG |=PIT_TFLG_TIF_MASK;//Çå³ý±ê־λ
PIT->CHANNEL[pit].TCTRL |=(PIT_TCTRL_TEN_MASK|PIT_TCTRL_TIE_MASK);//¿ªÆô¶¨Ê±Æ÷¼°Öжϣ¬¼û²Î¿¼ÊÖ²á976Ò³
}
//º¯ÊýÃû£ºDAC_Init
//˵ Ã÷£º´Ëº¯ÊýÊǽ«dacÄ£¿é½øÐгõʼ»¯ÅäÖÃ
//ûÓпªÆô»º´æ¼°dma¹¦ÄÜ
/********************************************************************************/
void DAC_Init(void)
{
SIM->SCGC2|=SIM_SCGC2_DAC0_MASK; //¿ªÆôdacÄ£¿éʱÖÓ£¬¼û²Î¿¼ÊÖ²á263Ò³
DAC0->C0|=DAC_C0_DACRFS_MASK; //ÅäÖòο¼µçѹԴΪ2ºÅ£¬¼û²Î¿¼ÊÖ²á798Ò³
DAC0->C0|=DAC_C0_DACEN_MASK ; //¿ªÆôdacÄ£¿é£¬¼û²Î¿¼ÊÖ²á798Ò³
}
上面是DA初始化和定时器初始化
void PIT1_IRQHandler(void)
{ uint16 da;
PIT->CHANNEL[1].TFLG|=PIT_TFLG_TIF_MASK;//Çå±ê־λ
PIT->CHANNEL[1].LDVAL=Sound_TONE;///*18;
if (Sound_OFF==0)
{
da=s_sin[DA_COUNT];
DA_COUNT++;
if (DA_COUNT>=12) DA_COUNT=0;
}
else //Sound_OFF=1
{
da=512;
}
if (Sound_OFF==0)
{
//LPC_DAC->DACR = (da << 6) | DAC_BIAS;
DAC0->DAT[0].DATL=((da>>0)&0x00FF);
DAC0->DAT[0].DATH=((da>>8)&0x00FF);
}
//Your Code
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
/// 定时器1初始化,单位:us
void PIT1_Init(uint8_t pit,uint32_t time)
{
GetProcessorInfo(); //计算系统时钟
time=time*(PInfo.BusClock/1000000);
//开始定时器配置
SIM->SCGC6|=SIM_SCGC6_PIT_MASK;//开启pit模块时钟,见参考手册269页
PIT->MCR&=~PIT_MCR_MDIS_MASK; //开启pit模块,见参考手册974页
PIT->MCR|=PIT_MCR_FRZ_MASK; //开启pit模块,见参考手册974页
PIT->CHANNEL[pit].LDVAL=(uint32_t)time;//设置延时时间,见参考手册975页
DA_COUNT=0;
//开启内核接受中断
switch(pit)
{
case 1:
NVIC_EnableIRQ(PIT1_IRQn);
break;
}
PIT->CHANNEL[pit].TFLG |=PIT_TFLG_TIF_MASK;//清除标志位
PIT->CHANNEL[pit].TCTRL |=(PIT_TCTRL_TEN_MASK|PIT_TCTRL_TIE_MASK);//开启定时器及中断,见参考手册976页
}
//函数名:DAC_Init
//说 明:此函数是将dac模块进行初始化配置
//没有开启缓存及dma功能
/********************************************************************************/
void DAC_Init(void)
{
SIM->SCGC2|=SIM_SCGC2_DAC0_MASK; //开启dac模块时钟,见参考手册263页
DAC0->C0|=DAC_C0_DACRFS_MASK; //配置参考电压源为2号,见参考手册798页
DAC0->C0|=DAC_C0_DACEN_MASK ; //开启dac模块,见参考手册798页
}
//开启前初始化以上2个模块 :DAC_Init(); PIT1_Init();
//函数名:PIT1_IRQHandler
//功 能:PIT中断通道1
//2011.8.26改为方波输出,减少了功耗,芯片不再发热!
void PIT1_IRQHandler(void)
{ uint16 da;
PIT->CHANNEL[1].TFLG|=PIT_TFLG_TIF_MASK;//清标志位
PIT->CHANNEL[1].LDVAL=Sound_TONE;///*18;
if (Sound_OFF==0)
{
da=s_sin[DA_COUNT];
DA_COUNT++;
if (DA_COUNT>=12) DA_COUNT=0;
}
else //Sound_OFF=1
{
da=512;
}
if (Sound_OFF==0)
{
//LPC_DAC->DACR = (da << 6) | DAC_BIAS;
DAC0->DAT[0].DATL=((da>>0)&0x00FF);
DAC0->DAT[0].DATH=((da>>8)&0x00FF);
}
//Your Code
}
这个没问题了
一周热门 更多>