void SPI_Init(void){ long i; SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI ); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA|SYSCTL_PERIPH_GPIOF ); GPIOPinTypeSSI(GPIO_PORTA_BASE ,GPIO_PIN_2); GPIOPinTypeSSI(GPIO_PORTA_BASE ,GPIO_PIN_3); GPIOPinTypeSSI(GPIO_PORTA_BASE ,GPIO_PIN_4); GPIOPinTypeSSI(GPIO_PORTA_BASE ,GPIO_PIN_5); // SSIDisable(SSI_BASE ); i=SysCtlClockGet(); SSIConfigSetExpClk(SSI0_BASE, i, SSI_FRF_MOTO_MODE_2, SSI_MODE_SLAVE, i/10, 16); SSIIntEnable(SSI_BASE ,SSI_RXTO|SSI_RXFF); SSIEnable(SSI_BASE);// SSI 管理方式 while(SSIDataGetNonBlocking(SSI0_BASE, SSIBUF)){ } // // Enable the SSI interrupt. // IntEnable(INT_SSI0);// PTF0- 输入SS 数据包开始标志 GPIOPinTypeGPIOInput(GPIO_PORTF_BASE,GPIO_PIN_0); GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_0,GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU); GPIOPinIntEnable(GPIO_PORTF_BASE,GPIO_PIN_0); IntEnable(INT_GPIOF);}
void SPI_ISR(void){ unsigned long ulStatus; ulStatus = SSIIntStatus(SSI_BASE,true); SSIIntClear(SSI_BASE,ulStatus); SPI++; if((ulStatus & SSI_RXFF)|(ulStatus & SSI_RXTO)){ while(1){ if (SSIDataGetNonBlocking(SSI_BASE,&SSIBUF[SSISP++])) ; else{ if (SSISP>=14) { SSISP=0; SPI=0;} break; } } }}