STM8L DAC设置问题求救

2019-03-23 20:04发布

时间很急,实在没时间看他们的库文件。   DAC的输出思路很简单,就是拿TIM4做定时中断,在中断处理程序中更新DAC的数据,结果出来的是方波形,而且还不有点变形。   程序如下。请各位专家帮忙。谢谢。   顺便问一句:MAMP到底是内部输出三角波的放大还是对于任意波形都可以放大?   const int16_t gSinBuf[] = { // 500hz的正弦数据 0x0, 0x053f, 0x09b3, 0x0cab, 0x0db7, 0x0cab, 0x09b2, 0x053f, 0x0, 0xfac0, 0xf64d,  0xf354, 0xf249, 0xf354, 0xf64e, 0xfac0};   /***************************************************************   ****************************************************************/ void DAC_Init( void ) {     // 打开DAC时钟     CLK_PCKENR1 |= 0x80;          // DAC control register 2(DMA close)     DAC_CR2 = 0;      // PF0为输出     PF_DDR |= 0x01;     PF_CR1 &= (~0x01);          // 开漏输出     PF_CR2 &= (~0x01);         // DAC control register 1     DAC_CR1 = 0x3f;  // s/w trig,OUT buf disable,DAC channel disable         ////// 下面是TIM4的初始化程序 //////       // 为了简化,就不列出了,经过测试是正确的时间间隔       .........   }   /***************************************************************   ****************************************************************/ @far @interrupt void TIM4_UPD_IRQHandler (void) {     static uint8_t  buf_len  = 0;     static uint8_t *buf_ptr  = NULL;     static uint16_t zero_len = 0;     static int16_t  val      = 0;         // clear update flag     TIM4_SR1 &= 0xfe;         DAC_Write(val);     zero_len ++;       if( buf_len )  // 准备下一个数据     {         val = gSinBuf[buf_len-1];         buf_len --;     }     else     {         buf_len = 16;         val = gSinBuf[buf_len-1];         buf_len --;     } }   /***************************************************************   ****************************************************************/ static void DAC_Write( uint16_t data ) {     // 只保留高12位,其中低4位丢弃     DAC_RDHRH = (data & 0xf000)>>12;     DAC_RDHRL = ((data & 0xfff)>>4);       // ????????这个不用每次设定吧,是不是在初始化的时候设置一次就可以????     // 还是写入DAC_RDHRHDAC_RDHRL的时候就触发了???     DAC_SWTRIGR = 0x1; } 此帖出自小平头技术问答
0条回答

一周热门 更多>