example_280xspi_init.c
来自「DSP2808例程。TMS320F2808DSP的各个模块的应用例程」· C语言 代码 · 共 86 行
C
86 行
#include "DSP280x_Device.h" // DSP280x Headerfile Include File
#include "DSP280x_Examples.h" // DSP280x Examples Include File
#define SD_cs_Hi GpioDataRegs.GPASET.bit.GPIO27 = 1
#define SD_cs_Lo GpioDataRegs.GPACLEAR.bit.GPIO27 = 1
void SPI_Init()
{
EALLOW;
GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 3; // Asynch input GPIO16 (SPImo)
GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 3; // Asynch input GPIO16 (SPImo)
GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 3; // Asynch input GPIO18 (SPIclk)
GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 3;// Configure GPIO16 as SPISIMOB
GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 3;// Configure GPIO16 as SPISIMOB
GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 3;// Configure GPIO18 as SPICLKB
GpioDataRegs.GPASET.bit.GPIO27 = 1; // Load output latch
GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 0; // Configure GPIO19
GpioCtrlRegs.GPADIR.bit.GPIO27 = 1; // GPIO19 = output
EDIS;
//init spi_b
SpibRegs.SPICCR.all =0x0007; // reset, rising edge, 8-bit char bits
SpibRegs.SPICTL.all =0x000E; // Enable master mode, normal phase,
// enable talk, and SPI int disabled.
SpibRegs.SPIBRR = 24; // 0 : 25/4 M
// 4 : 25/(4+1) = 5M
// 24: 25/(24+1)= 1M
// 49: 25/(49+1)=500k
SpibRegs.SPICCR.all =0x0087; // Relinquish SPI from Reset
SpibRegs.SPIPRI.bit.FREE = 1; // Set so breakpoints don't disturb xmission
}
/*
void SPI_Init( void )
{
DWORD portConfig;
BYTE i, Dummy;
// Configure PIN connect block
// bit 32, 54, 76 are 0x10, bit 98 are 0x00
// port 0 bits 17, 18, 19, 20 are SSP port SCK1, MISO1, MOSI1,
// and SSEL1 set SSEL to GPIO pin that you will have the totoal
// freedom to set/reset the SPI chip-select pin
SSPCR1 = 0x00; // SSP master (off) in normal mode
portConfig = PINSEL1;
PINSEL1 = portConfig | 0x00A8;
IODIR0 = SPI_SEL; // SSEL is output
IOSET0 = SPI_SEL; // set SSEL to high
// Set PCLK 1/2 of CCLK
VPBDIV = 0x02;
//VPBDIV =0x00; //1/4
// Set data to 8-bit, Frame format SPI, CPOL = 0, CPHA = 0,and SCR is 15
SSPCR0 = 0x0707;
// SSPCPSR clock prescale register, master mode, minimum divisor is 0x02
SSPCPSR = 0x2;
// Device select as master, SSP Enabled, normal operational mode
SSPCR1 = 0x02;
for ( i = 0; i < 8; i++ )
{
Dummy = SSPDR; // clear the RxFIFO
}
return;
}
*/
Uint16 spi_xmit(Uint16 a)
{ Uint16 RxData = 0 ;
SpibRegs.SPITXBUF=a;
while ( !(SpibRegs.SPISTS.bit.INT_FLAG) ) {}
RxData = SpibRegs.SPIRXBUF;
return RxData ;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?