请选择 进入手机版 | 继续访问电脑版
搜索
热搜: XMC1000 XMC4000
查看: 241|回复: 2

DSD模块载波生成的问题

[复制链接]

2

主题

6

帖子

38

积分

新手上路

Rank: 1

积分
38
发表于 2018-1-9 17:25:04 | 显示全部楼层 |阅读模式
现在根据官方给的XMC4800的资料,写了DSD模块的载波生成的程序,但是无法从配置的载波输出的I/O端口看到输出的波形,是什么问题呢?或者有载波生成的程序可以参考吗?急、、、、
回复

使用道具 举报

0

主题

71

帖子

243

积分

中级会员

Rank: 3Rank: 3

积分
243
发表于 2018-1-10 09:14:22 | 显示全部楼层
检查一下你的IO输出端配置的模式是不是正确的,可以仿真看一下寄存器的状态是不是正确的,论坛的资料下载中有XMC4500DSD的例程,或许可以给你提供参考
回复 支持 反对

使用道具 举报

2

主题

6

帖子

38

积分

新手上路

Rank: 1

积分
38
 楼主| 发表于 2018-1-10 10:09:41 | 显示全部楼层
hi嗨hi 发表于 2018-1-10 09:14
检查一下你的IO输出端配置的模式是不是正确的,可以仿真看一下寄存器的状态是不是正确的,论坛的资料下载中 ...

程序就是参考的论坛里面4500去配置的,其实现在我只需要看一看生成的载波波形是否正确,寄存器检查了也没啥问题,下面是我的代码,您能帮忙看看是否有问题吗?
{
        //设定SCU中的复位操作
        SCU_RESET->PRSET0 |= 0x02;  //写入DSDRS[1]=1B,DSD模块声明选择复位
        SCU_RESET->PRCLR0 |= 0x02;  //写入DSDRS[1]=1B,DSD模块复位解除声明

        //配置时钟信号,对时钟进行分频

        //DISR[0]=0B;开通请求,启用模块时钟;DISS[1]=0B,模块时钟启用;EDIS[3]=0B,睡眠模式启用;
        DSD->CLC = 0x00;

        //MCSEL[2:0]=001B,选择作为调制器时钟的片上时钟信号的来源,fdsd
        DSD->GLOBCFG |= 0x01;

        //生成载波,即配置载波类型,频率等
        //CGMOD[1:0]=11B,表示载波产生正弦波,DIVCG[7:4]=0101B,5,表示载波信号的分频因子
        //fcg=fclk/2*(5+1),载波信号自身的频率为fcg/1024=144Mhz/2*6/1024=11718.75Hz
        DSD->CGCFG |= 0x53;


        //配置DSD的通道时钟
        //调制器的时钟配置DIVM[19:16]=1000B,4,fmod=fclk/2*(1+n),fmod=144Mhz/10=14.4Mhz
        //DWC[23]=1B,表示DIVM位段可以被写入
        DSD_CH0->MODCFG |= 0x840000;
        DSD_CH1->MODCFG |= 0x840000;

        //解调器输入配置寄存器
        //DSRC[3:0]=0010B,来自输入A,直接的
        //DSWC[7]=1B,可对DSRC写操作
        //ITRMODE[9:8]=11B,积分器触发模式,一直有效
        //TRWC[15]=1B,TRSEL,TSTRMODE,ITRMODE字段可以进行写操作
        //CSRC[19:16]=0001B,采样时钟源来自输入A
        //STROBE[23:20]=0001B, 直接时钟,在每一个时钟上升沿产生采样触发
        //SCWC[31]=1B, STROBE, CSRC 位段可以进行写操作
        DSD_CH0->DICFG |= 0x80118382;
        DSD_CH1->DICFG |= 0x80118384;

        //调制器中的滤波器配置
        //CFMDF[7:0]=00001111B,0x0F,主CIC滤波器的抽取因子为CFMDF + 1,范围为0x03-0xFF(4-256)
        //CFMC[9:8]=10B,CIC滤波器(主链)配置,表示CIC3,三级滤波器
        //CFEN[10]=1B,CIC 启用滤波器
        //SRGM[15:14]=11B,主链服务请求产生,总是,对每一个新的结果值
        //CFMSV[23:16]=0x04,当启动或重启时,抽取计数器从值CFMSV开始计数,有效值0x03-CFMDF(4-CFMDF+1)
        DSD_CH0->FCFGC |= 0x0004C60F;
        DSD_CH1->FCFGC |= 0x0004C60F;

        //积分窗口控制寄存器
        //NVALCNT[5:0]=001111B,计数值的数量
        //INTEN[7]=1B,积分器启用
        //REPCNT[11:8]=0000B,积分器周期计数器,通过REPVAL位段选择积分的周期数目
        //REPVAL[15:12]=1111B,积分周期的数量,周期数为REPVAL+1
        //IWS[23]=0B,积分窗口大小,内部控制:在REPVAL+1个积分周期后停止积分器
        //NVALINT[29:24]=101111B,积分值的数量,在NVALINT+1个值后一个积分周期结束
        DSD_CH0->IWCTR |= 0x2F00F08F;
        DSD_CH1->IWCTR |= 0x2F00F08F;

        //校正配置寄存器
        //RFEN[0]=1B,根据SGND数据已经校正
        DSD_CH0->RECTCFG |= 0x00;
        DSD_CH1->RECTCFG |= 0x00;

        //载波生成器同步寄存器
        //SDPOS[23:16]=0x07;正半周期的符号延时值
        //SDNEG[31:24]=0x25;负半周期的符号延时值
        DSD_CH0->CGSYNC |=0x07070000;
        DSD_CH0->CGSYNC |=0x07070000;

        //全局运行控制寄存器
        //CHxRUN[3:0]=0011B,每一位(设置时)启用相应的解调器通道
        DSD->GLOBRC |= 0x01;


                //P5.0
                //引脚输入输出功能
                PORT5->IOCR0 = PORT5->IOCR0 & ((uint32_t)~(0xF8 << (8 * (0 & 0x3U))));
                //引脚设置为ALT2输出模式[]=10010B
                PORT5->IOCR0 = PORT5->IOCR0 | ((uint32_t)0x90 << (8 * (0 & 0x3U)));
                //输出强度清除
                PORT5->PDR0 = PORT5->PDR0 & ((uint32_t)~(0x7 << ((uint32_t)4 * ((uint32_t)0 & 0x7U))));
                //PahseU_HIGH输出强度选择STRENGTH_STRONG_SOFT_EDGE
                PORT5->PDR0 = PORT5->PDR0 | ((uint32_t)0x2 << ((uint32_t)4 * ((uint32_t)0 & 0x7U)));
                //输出低电平
                PORT5->OUT = PORT5->OUT & ((uint32_t)~(0x1 << 0));

                //P1.1
                //引脚输入输出功能
                PORT1->IOCR0 = PORT1->IOCR0 & ((uint32_t)~(0xF8 << (8 * (1 & 0x3U))));
                //引脚设置为ALT1输出模式[]=10001B
                PORT1->IOCR0 = PORT1->IOCR0 | ((uint32_t)0x88 << (8 * (1 & 0x3U)));
                //输出强度清除
                PORT1->PDR0 = PORT1->PDR0 & ((uint32_t)~(0x7 << ((uint32_t)4 * ((uint32_t)1 & 0x7U))));
                //PahseU_HIGH输出强度选择STRENGTH_STRONG_SOFT_EDGE
                PORT1->PDR0 = PORT1->PDR0 | ((uint32_t)0x2 << ((uint32_t)4 * ((uint32_t)1 & 0x7U)));
                //输出低电平
                PORT1->OUT = PORT1->OUT & ((uint32_t)~(0x1 << 1));

                //P0^8
                //引脚输入输出功能
                PORT0->IOCR8 = PORT0->IOCR8 & ((uint32_t)~(0xF8 << (8 * (8 & 0x3U))));
                //引脚设置为输入模式
                PORT0->IOCR8 = PORT0->IOCR8 | ((uint32_t)0x18 << (8 * (8 & 0x3U)));
                //输出强度清除
                PORT0->PDR1 = PORT0->PDR1 & ((uint32_t)~(0x7 << ((uint32_t)4 * ((uint32_t)8 & 0x7U))));
                //PahseU_HIGH输出强度选择STRENGTH_STRONG_SOFT_EDGE
                PORT0->PDR1 = PORT0->PDR1 | ((uint32_t)0x2 << ((uint32_t)4 * ((uint32_t)8 & 0x7U)));

                //P2^6
                //引脚输入输出功能
                PORT2->IOCR4 = PORT2->IOCR4 & ((uint32_t)~(0xF8 << (8 * (6 & 0x3U))));
                //引脚设置为输入模式
                PORT2->IOCR4 = PORT2->IOCR4 | ((uint32_t)0x18 << (8 * (6 & 0x3U)));
                //输出强度清除
                PORT2->PDR0 = PORT2->PDR0 & ((uint32_t)~(0x7 << ((uint32_t)4 * ((uint32_t)6 & 0x7U))));
                //强度选择STRENGTH_STRONG_SOFT_EDGE
                PORT2->PDR0 = PORT2->PDR0 | ((uint32_t)0x2 << ((uint32_t)4 * ((uint32_t)6 & 0x7U)));

                //P0.8
                PORT0->HWSEL |= 0x000020000;


                //P1.8
                //输入时钟
                //引脚输入输出功能
                PORT1->IOCR8 = PORT1->IOCR8 & ((uint32_t)~(0xF8 << (8 * (8 & 0x3U))));
                //引脚设置为输入模式
                PORT1->IOCR8 = PORT1->IOCR8 | ((uint32_t)0x18 << (8 * (8 & 0x3U)));
                //输出强度清除
                PORT1->PDR1 = PORT1->PDR1 & ((uint32_t)~(0x7 << ((uint32_t)4 * ((uint32_t)8 & 0x7U))));
                //强度选择STRENGTH_STRONG_SOFT_EDGE
                PORT1->PDR1 = PORT1->PDR1 | ((uint32_t)0x2 << ((uint32_t)4 * ((uint32_t)8 & 0x7U)));

                //P1.9
                //输入时钟
                //引脚输入输出功能
                PORT1->IOCR8 = PORT1->IOCR8 & ((uint32_t)~(0xF8 << (8 * (9 & 0x3U))));
                //引脚设置为输入模式
                PORT1->IOCR8 = PORT1->IOCR8 | ((uint32_t)0x18 << (8 * (9 & 0x3U)));
                //输出强度清除
                PORT1->PDR1 = PORT1->PDR1 & ((uint32_t)~(0x7 << ((uint32_t)4 * ((uint32_t)9 & 0x7U))));
                //强度选择STRENGTH_STRONG_SOFT_EDGE
                PORT1->PDR1 = PORT1->PDR1 | ((uint32_t)0x2 << ((uint32_t)4 * ((uint32_t)9 & 0x7U)));
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|英飞凌技术社区

GMT+8, 2018-9-25 03:54 , Processed in 0.060443 second(s), 13 queries , APC On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表