共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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 28BYJ-48机械臂实现人脸跟随被打赏¥24元 | |
| 基于RK3506B的片温识读功能的实现被打赏¥25元 | |
| 【瑞萨RA8D1测评】基于FreeRTOS的lvgl移植教程被打赏¥29元 | |
| 电子价签墨水屏开发被打赏¥35元 | |
| 【Ozone】RTT 打印终端使用被打赏¥29元 | |
| BMS保护板绝缘检测功能-不平衡电桥技术绝缘电阻检测设计与实现被打赏¥34元 | |
| 给28BYJ-48三自由度机械臂加一个网页控制台被打赏¥32元 | |
| 用28BYJ-48电机从零搭一台三自由度机械臂被打赏¥33元 | |
| 【英飞凌开发经验】ModusToolbox配置EdgeTalk外设被打赏¥27元 | |
| 基于BQ76952PFBR的BMS保护板热插拔损坏的原因和处理措施被打赏¥32元 | |
我要赚赏金
