共2条
1/1 1 跳转至页
nbsp,nbsp,5000,McBSP 初学 求5000系列McBSP寄存器初始化代码
问
求5000系列McBSP驱动串行AD或DA的寄存器初始化代码,主要是时钟和帧同步那部分,我看了几本书也没搞清楚。
那位高手帮帮忙,把你们手上用过的发一段过来就可以,最好是c,汇编也行。
多谢啦 答 1: 回复主题:初学 求5000系列McBSP寄存器初始化代码void InitMcBSP0(void)
{
SetMcBSPReg(0,SPCR1,0x00);
SetMcBSPReg(0,SPCR2,0x00);
/*SET McBSP0*/
SetMcBSPReg(0,SPCR1,0x00);
SetMcBSPReg(0,SPCR2,0x0200);
SetMcBSPReg(0,PCR,0x0A00);
SetMcBSPReg(0,RCR1,0x40);
SetMcBSPReg(0,RCR2,0x41);
SetMcBSPReg(0,XCR1,0x40);
SetMcBSPReg(0,XCR2,0x41);
SetMcBSPReg(0,SRGR1,0x1027); ////FWID=1+1;CLKDGV=39+1,SCLK = CPU CLK /(CLKDGV+1) =1MhZ
SetMcBSPReg(0,SRGR2,0x02027);
}
void StartMcBSP0(void)
{
/* 开始McBSP0发送和采集数据 */
SetMcBSPReg(0,SPCR2,0xC0);
SetMcBSPReg(0,SPCR1,0x01);
SetMcBSPReg(0,SPCR2,0xc1);
/* ***************************/
}
void StopMcBSP0()
{
SetMcBSPReg(0,SPCR1,0x00);
SetMcBSPReg(0,SPCR2,0x00);
}
void StartDataCollect(void)
{
SetMcBSPReg(1,SPCR2,0xC0);
SetMcBSPReg(1,SPCR1,0x01);
SetMcBSPReg(1,SPCR2,0xc1);
}
void StopDataCollect()
{
SetMcBSPReg(1,SPCR1,0x0);
SetMcBSPReg(1,SPCR2,0x0);
}
void SetMcBSPReg(unsigned int McBSPNo,unsigned int McBSPReg,unsigned int Value)
{
switch(McBSPNo)
{
case 0: {
SPSA0 = McBSPReg;
C_NOP;C_NOP;C_NOP; C_NOP;C_NOP;C_NOP;
SPSD0 = Value;
C_NOP;C_NOP;C_NOP; C_NOP;C_NOP;C_NOP;
}
break;
case 1: {
SPSA1 = McBSPReg;
C_NOP;C_NOP;C_NOP; C_NOP;C_NOP;C_NOP;
SPSD1 = Value;
C_NOP;C_NOP;C_NOP; C_NOP;C_NOP;C_NOP;
}
break;
default:
break;
}
} 答 2: 非常感谢!!附加2个问题1:“SPSA1 = McBSPReg;
C_NOP;C_NOP;C_NOP; C_NOP;C_NOP;C_NOP;
SPSD1 = Value;
C_NOP;C_NOP;C_NOP; C_NOP;C_NOP;C_NOP;”
这里面的延时一定要有么?直接写可不可以?
2:普通模式下,初始化完McBSP是一定要有数据传输才有CLKX的时钟输出?还是使能/XRST后就会有输出时钟。
答 3: 延时应该有至于时钟信号应该是在初始化后就有了。
可以用示波器测一下
那位高手帮帮忙,把你们手上用过的发一段过来就可以,最好是c,汇编也行。
多谢啦 答 1: 回复主题:初学 求5000系列McBSP寄存器初始化代码void InitMcBSP0(void)
{
SetMcBSPReg(0,SPCR1,0x00);
SetMcBSPReg(0,SPCR2,0x00);
/*SET McBSP0*/
SetMcBSPReg(0,SPCR1,0x00);
SetMcBSPReg(0,SPCR2,0x0200);
SetMcBSPReg(0,PCR,0x0A00);
SetMcBSPReg(0,RCR1,0x40);
SetMcBSPReg(0,RCR2,0x41);
SetMcBSPReg(0,XCR1,0x40);
SetMcBSPReg(0,XCR2,0x41);
SetMcBSPReg(0,SRGR1,0x1027); ////FWID=1+1;CLKDGV=39+1,SCLK = CPU CLK /(CLKDGV+1) =1MhZ
SetMcBSPReg(0,SRGR2,0x02027);
}
void StartMcBSP0(void)
{
/* 开始McBSP0发送和采集数据 */
SetMcBSPReg(0,SPCR2,0xC0);
SetMcBSPReg(0,SPCR1,0x01);
SetMcBSPReg(0,SPCR2,0xc1);
/* ***************************/
}
void StopMcBSP0()
{
SetMcBSPReg(0,SPCR1,0x00);
SetMcBSPReg(0,SPCR2,0x00);
}
void StartDataCollect(void)
{
SetMcBSPReg(1,SPCR2,0xC0);
SetMcBSPReg(1,SPCR1,0x01);
SetMcBSPReg(1,SPCR2,0xc1);
}
void StopDataCollect()
{
SetMcBSPReg(1,SPCR1,0x0);
SetMcBSPReg(1,SPCR2,0x0);
}
void SetMcBSPReg(unsigned int McBSPNo,unsigned int McBSPReg,unsigned int Value)
{
switch(McBSPNo)
{
case 0: {
SPSA0 = McBSPReg;
C_NOP;C_NOP;C_NOP; C_NOP;C_NOP;C_NOP;
SPSD0 = Value;
C_NOP;C_NOP;C_NOP; C_NOP;C_NOP;C_NOP;
}
break;
case 1: {
SPSA1 = McBSPReg;
C_NOP;C_NOP;C_NOP; C_NOP;C_NOP;C_NOP;
SPSD1 = Value;
C_NOP;C_NOP;C_NOP; C_NOP;C_NOP;C_NOP;
}
break;
default:
break;
}
} 答 2: 非常感谢!!附加2个问题1:“SPSA1 = McBSPReg;
C_NOP;C_NOP;C_NOP; C_NOP;C_NOP;C_NOP;
SPSD1 = Value;
C_NOP;C_NOP;C_NOP; C_NOP;C_NOP;C_NOP;”
这里面的延时一定要有么?直接写可不可以?
2:普通模式下,初始化完McBSP是一定要有数据传输才有CLKX的时钟输出?还是使能/XRST后就会有输出时钟。
答 3: 延时应该有至于时钟信号应该是在初始化后就有了。
可以用示波器测一下
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |