DSP_TMS320F28374S的SPI初始化

目录

一、GPIO 复用引脚表

二、SPIB初始化

方法一:

方法二:

三、收发数据


一、GPIO 复用引脚表

二、SPIB初始化

F2837xS_Spi.c

方法一:

void InitSpibGpio()
{
    // SPISIMOB.
    //
    GPIO_SetupPinMux(63, GPIO_MUX_CPU1, 15);
    GPIO_SetupPinOptions(63, GPIO_OUTPUT, GPIO_ASYNC);
    //
    // SPISOMIB.
    //
    GPIO_SetupPinMux(64, GPIO_MUX_CPU1, 15);
    GPIO_SetupPinOptions(64, GPIO_OUTPUT, GPIO_ASYNC);
    //
    // SPICLKB.
    //
    GPIO_SetupPinMux(65, GPIO_MUX_CPU1, 15);
    GPIO_SetupPinOptions(65, GPIO_OUTPUT, GPIO_ASYNC);
    //
    // SPICSB.
    //
    GPIO_SetupPinMux(66, GPIO_MUX_CPU1, 15);
    GPIO_SetupPinOptions(66, GPIO_OUTPUT, GPIO_ASYNC);
    GPIO_WritePin(66, 1);

    //SPI配置
    // Set reset low before configuration changes
    // Clock polarity (0 == rising, 1 == falling)
    // 16-bit character
    // Disable loop-back
    //
    SpibRegs.SPICCR.bit.SPISWRESET = 0;    //初始化软件复位
    SpibRegs.SPICCR.bit.CLKPOLARITY = 0;   //时钟极性,0数据在时钟信号上升沿输出
    SpibRegs.SPICCR.bit.SPICHAR = (16 - 1);//字符长度控制
    SpibRegs.SPICCR.bit.SPILBK = 0;        //自测试模式  0禁止 1默认 SIMO与SOMI内部相连

    //
    // Enable master (0 == slave, 1 == master)
    // Enable transmission (Talk)
    // Clock phase (0 == normal, 1 == delayed)
    // SPI interrupts are disabled
    //
    SpibRegs.SPICTL.bit.MASTER_SLAVE = 1;//主从模式设置  1主 0从
    SpibRegs.SPICTL.bit.TALK = 1;        //主动/从动发送使能  1主动 0被动
    SpibRegs.SPICTL.bit.CLK_PHASE = 0;   //时钟相位选择 0正常 1延迟半个时钟周期
    SpibRegs.SPICTL.bit.SPIINTENA = 0;   //时钟相位选择 0正常 1延迟半个时钟周期

    //
    // Set the baud rate using a 2 MHz SPICLK
    // BRR = (LSPCLK / SPICLK) - 1
    //
    SpibRegs.SPIBRR.bit.SPI_BIT_RATE = ((25000000 / 2000000) - 1);//波特率设置   SPI 波特率=LSPCLK/(SPIBRR+1)

    //
    // Set FREE bit
    // Halting on a breakpoint will not halt the SPI
    //
    SpibRegs.SPIPRI.bit.FREE = 1;//SPI 自由运行

    //
    // Release the SPI from reset
    //
    SpibRegs.SPICCR.bit.SPISWRESET = 1;//软件复位完成,开始接收数据
}

方法二:

    //
    // Enable internal pull-up for the selected pins
    //
    // Pull-ups can be enabled or disabled by the user.
    // This will enable the pullups for the specified pins.
    // Comment out other unwanted lines.
    //
    GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0;   // Enable pull-up on GPIO63 (SPISIMOB)
    GpioCtrlRegs.GPCPUD.bit.GPIO64 = 0;   // Enable pull-up on GPIO64 (SPISOMIB)
    GpioCtrlRegs.GPCPUD.bit.GPIO65 = 0;   // Enable pull-up on GPIO65 (SPICLKB)
    GpioCtrlRegs.GPCPUD.bit.GPIO66 = 0;   // Enable pull-up on GPIO66 (SPISTEB)

    //
    // Set qualification for selected pins to asynch only
    //
    // This will select asynch (no qualification) for the selected pins.
    // Comment out other unwanted lines.
    //
    GpioCtrlRegs.GPBQSEL2.bit.GPIO63 = 3; // Asynch input GPIO63 (SPISIMOB)
    GpioCtrlRegs.GPCQSEL1.bit.GPIO64 = 3; // Asynch input GPIO64 (SPISOMIB)
    GpioCtrlRegs.GPCQSEL1.bit.GPIO65 = 3; // Asynch input GPIO65 (SPICLKB)
    GpioCtrlRegs.GPCQSEL1.bit.GPIO66 = 3; // Asynch input GPIO66 (SPISTEB)

    //
    //Configure SPI-B pins using GPIO regs
    //
    // This specifies which of the possible GPIO pins will be SPI functional
    // pins.
    // Comment out other unwanted lines.
    GpioCtrlRegs.GPBGMUX2.bit.GPIO63 = 3; //  SPISIMOA
    GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 3; // Configure GPIO63 as SPISIMOB
    GpioCtrlRegs.GPCGMUX1.bit.GPIO64 = 3; //  SPISIMOA
    GpioCtrlRegs.GPCMUX1.bit.GPIO64 = 3; // Configure GPIO64 as SPISOMIB
    GpioCtrlRegs.GPCGMUX1.bit.GPIO65 = 3; //  SPISIMOA
    GpioCtrlRegs.GPCMUX1.bit.GPIO65 = 3; // Configure GPIO65 as SPICLKB
    GpioCtrlRegs.GPCGMUX1.bit.GPIO66 = 3; //  SPISIMOA
    GpioCtrlRegs.GPCMUX1.bit.GPIO66 = 3; // Configure GPIO66 as SPISTEB

    // Initialize SPI-B
    // Set reset low before configuration changes
    // Clock polarity (0 == rising, 1 == falling)
    // 16-bit character
    // Enable loop-back
    SpibRegs.SPICCR.bit.SPISWRESET = 0;// 初始化软件复位。
    SpibRegs.SPICCR.bit.CLKPOLARITY = 0;//时钟极性,0数据在时钟信号上升沿输出
    SpibRegs.SPICCR.bit.SPICHAR = (16-1);//字符长度控制
    SpibRegs.SPICCR.bit.SPILBK = 0;//自测试模式    0禁止 1默认SIMO与SOMI内部相连

    // Enable master (0 == slave, 1 == master)
    // Enable transmission (Talk)
    // Clock phase (0 == normal, 1 == delayed)
    // SPI interrupts are disabled
    SpibRegs.SPICTL.bit.MASTER_SLAVE = 1;//主从模式设置  1主 0从
    SpibRegs.SPICTL.bit.TALK = 1;        //主动/从动发送使能  1主动 0被动
    SpibRegs.SPICTL.bit.CLK_PHASE = 0;   //时钟相位选择 0正常 1延迟半个时钟周期
    SpibRegs.SPICTL.bit.SPIINTENA = 0;   //SPI中断使能位  0禁止 1使能

    // Set the baud rate
    SpibRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR;//波特率设置        SPI 波特率=LSPCLK/(SPIBRR+1)    200M/(99+1)

    // Set FREE bit
    // Halting on a breakpoint will not halt the SPI
    SpibRegs.SPIPRI.bit.FREE = 1;               //SPI 自由运行

    // Release the SPI from reset
    SpibRegs.SPICCR.bit.SPISWRESET = 1;         //软件复位完成,开始接收数据

F2837xS_Spi.h

void InitSpibGpio();

三、收发数据

Uint16 sdata=0x0000;  // send data
Uint16 rdata;  // received data
rdata = SpibRegs.SPIRXBUF;
SpibRegs.SPITXBUF = sdata;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值