目录
一、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;