【开发笔记】使用DSP28335的Mcbsp复用成SPI驱动MCP23S09IO扩展芯片

在项目中用到了DSP的mcbsp复用成SPI功能,网上相关代码较少,CSDN部分资源付费,现将部分代码附上,包含MCP23S09驱动

void Drv_Mcbsp_Init(void)
{
    // 1. 配置MCBSP的GPIO引脚
    EALLOW;
    GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 3; // MDXB引脚
    GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 3; // MDRB引脚
    GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 3; // CLKX引脚
    GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 0; // FSX引脚

    GpioCtrlRegs.GPADIR.bit.GPIO12 = 1;  // MDXB引脚输出
    GpioCtrlRegs.GPADIR.bit.GPIO13 = 0;  // MDRB引脚输入
    GpioCtrlRegs.GPADIR.bit.GPIO14 = 1;  // CLKX引脚输出
    GpioCtrlRegs.GPADIR.bit.GPIO15 = 1;  // FSX引脚输出

    McbspbRegs.SPCR2.all=0x0000; // Reset FS generator, sample rate generator & transmitter
    McbspbRegs.SPCR1.all=0x0000; // Reset Receiver, Right justify word, Digital loopback dis.
    McbspbRegs.MFFINT.all=0x0; // Disable all interrupts
    McbspbRegs.PCR.bit.FSXM = 1; //FSX generated internally, FSR derived from an external source
    McbspbRegs.PCR.bit.CLKXM = 1; //CLKX generated internally, CLKR derived from an external source
    McbspbRegs.PCR.bit.FSRM = 1;

    McbspbRegs.PCR.bit.CLKRM = 1;
    McbspbRegs.PCR.bit.SCLKME=0;
    McbspbRegs.PCR.bit.FSXP=1;
    McbspbRegs.PCR.bit.CLKXP=0;
    McbspbRegs.PCR.bit.CLKRP=1;
    McbspbRegs.SPCR1.bit.CLKSTP = 3;
    McbspbRegs.RCR2.all=0x0; // Single-phase frame, 1 word/frame, No companding (Receive)
    McbspbRegs.RCR1.all=0x0;
    McbspbRegs.XCR2.all=0x0; // Single-phase frame, 1 word/frame, No companding (Transmit)
    McbspbRegs.XCR1.all=0x0;

    McbspbRegs.XCR2.bit.XDATDLY=1;
    McbspbRegs.RCR2.bit.RDATDLY=1;

    McbspbRegs.SRGR2.all=0x2000; // CLKSM=1, FPER = 1 CLKG periods
    McbspbRegs.SRGR1.all= 0x001D; // Frame Width = 1 CLKG period, CLKGDV=29
    McbspbRegs.SPCR2.bit.GRST=1; // Enable the sample rate generator
    DELAY_US(2); // Wait at least 2 SRG clock cycles

    McbspbRegs.RCR1.bit.RWDLEN1=0;     // 8-bit word
    McbspbRegs.XCR1.bit.XWDLEN1=0;     // 8-bit word

    McbspbRegs.SPCR2.bit.XRST=1; // Release TX from Reset
    McbspbRegs.SPCR1.bit.RRST=1; // Release RX from Reset
    McbspbRegs.SPCR2.bit.FRST=1; // Frame Sync Generator reset
    EDIS;

}

编辑器为CCSv7 在mcbsp发送时数据放于寄存器低八位,如下代码所示,0xf0为测试用

BOOL Mcbsp_Write(BOOL data)
{
    McbspbRegs.DXR1.bit.LWHB=0xF0;
    McbspbRegs.DXR1.bit.LWLB=data;
    while(McbspbRegs.SPCR2.bit.XRDY==0);
    while(McbspbRegs.SPCR1.bit.RRDY==0);
    BOOL res = McbspbRegs.DRR1.bit.LWLB;
    return res;
}
void MCP23S09_Write(BOOL regAddr, BOOL data)
{
    GpioDataRegs.GPADAT.bit.GPIO15=0;
    Mcbsp_Write(0x40);
    Mcbsp_Write(regAddr);
    Mcbsp_Write(data);
    GpioDataRegs.GPADAT.bit.GPIO15=1;
}
BOOL MCP23S09_Read(BOOL regAddr)
{
    BOOL data=0;
    GpioDataRegs.GPADAT.bit.GPIO15=0;
    Mcbsp_Write(0x41);//读指令
    Mcbsp_Write(regAddr);
    data = Mcbsp_Write(0xff);
    GpioDataRegs.GPADAT.bit.GPIO15=1;
    return data;
}
BOOL MCP23S09_Init(BOOL data)
{
    BOOL res =0;
    MCP23S09_Write(0x05,0x20);//按字节写
    MCP23S09_Write(0x00,0x00);//配置为输出模式
    MCP23S09_Write(0x06,0xFF);//配置为上拉
    MCP23S09_Write(0x0A,data);//写入测试数据
    res = MCP23S09_Read(0x09);//读取测试数据
    if(res == data)
        return TRUE;
    else
        return FALSE;
}

希望可以帮助到你

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值