5946|0

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM8L DAC设置问题求救 [复制链接]

时间很急,实在没时间看他们的库文件。

 

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;

}

此帖出自stm32/stm8论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表