共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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |