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 + -
显示快捷键?