|  | 
沙发
 
 
 楼主|
发表于 2022-3-22 20:22:53
|
只看该作者 
| /****************************************************************************/ /*                                                                          */
 /*              主函数                                                      */
 /*                                                                          */
 /****************************************************************************/
 int main(void)
 {
 // 外设使能配置
 PSCInit();
 
 
 // 管脚复用配置
 GPIOBankPinMuxSet();
 
 // GPIO 管脚初始化
 GPIOBankPinInit();
 
 //参数初始化
 paramater_init();
 
 
 // 初始化串口终端 使用串口2
 UARTStdioInit();
 UARTPuts("SPI1_A9 Test by Zzc......\r\n", -1);
 
 // 定时器 / 计数器初始化
 TimerInit();
 // DSP 中断初始化
 InterruptInit();
 
 // 定时器 / 计数器中断初始化
 TimerInterruptInit();
 // SPI 中断初始化
 //SPIInterruptInit();
 
 
 // SPI 初始化
 SPIInit();
 
 
 
 
 while(1)
 {
 
 //Delay(1000);
 if(testj==1000)
 {
 
 //与A9SPI传输
 
 ToA9_SPI_Transfer();
 
 GPIOPinWrite(SOC_GPIO_0_REGS, 6, Flag);   // D6  亮 GPIO0[5]
 Flag=!Flag;
 GPIOPinWrite(SOC_GPIO_0_REGS, 6, Flag);
 
 
 }
 
 
 //UARTprintf("SPI_A9[%d] = %d\r\n", 10,rx_data[10]);//GPIOPinWrite(SOC_GPIO_0_REGS, 6, GPIO_PIN_LOW);
 }
 
 }
 
 void ToA9_SPI_Transfer(void)
 {
 //p_tx = &tx_data[0];
 //p_tx = (uint8_t*)tx_data;
 //p_rx = (uint8_t*)rx_data;
 //p_rx = &rx_data[0];
 testi++;
 testj=0;
 
 if(testi == A9_DSP.averge)
 {
 TimerDisable(SOC_TMR_2_REGS, TMR_TIMER12);
 TimerIntDisable(SOC_TMR_2_REGS, TMR_INT_TMR12_NON_CAPT_MODE);
 if(ModeFlag() == 0)
 {
 for(k=0;k<10;k++)
 {
 tx_data[k]=k;//校验
 }
 
 for(k=10;k<4013;k++)
 {
 tx_data[k]=3;
 //tx_data[k]=data_buff[k];
 }
 for(k = 4013; k < 4023; k++)
 {
 tx_data[k]=0;
 }
 
 Delay(1000);
 
 SPI1_Communicate((uint8_t*)tx_data, rx_data, 4023);
 
 
 GPIOPinWrite(SOC_GPIO_0_REGS, 9, GPIO_PIN_LOW); //GPIO0[8]向A9发送低电平
 GPIOPinWrite(SOC_GPIO_0_REGS, 3, GPIO_PIN_LOW);
 
 
 }
 // memset(tx_data, 0, size1 * sizeof(uint32_t)); //清空tx_data
 // memset(Data_TX_Buff, 0, SIZE3 * sizeof(uint32_t));
 // memset(rx_data, 0, size2 * sizeof(uint8_t)); //清空rx_data
 testi=0;
 // 定时器 / 计数器初始化
 TimerInit();
 TimerInterruptInit();
 }
 }
 void SPI1_Communicate(uint8_t * sp2TxBuffer, uint8_t * sp2RxBuffer, int NumByteToRead)
 {
 
 NumByteToRead++;
 while (--NumByteToRead)
 {
 while( HWREG(SOC_SPI_1_REGS + SPI_SPIBUF) & (0x20000000));
 
 SPITransmitData1(SOC_SPI_1_REGS, *sp2TxBuffer);
 sp2TxBuffer++;
 
 //UARTprintf("%d\r\n",1);
 
 if(NumByteToRead == 4023)
 {
 
 GPIOPinWrite(SOC_GPIO_0_REGS, 9, GPIO_PIN_HIGH); //GPIO0[8]向A9发送高电平
 GPIOPinWrite(SOC_GPIO_0_REGS, 3, GPIO_PIN_HIGH);
 //UARTprintf("%d\r\n",2);
 }
 else
 {
 //UARTprintf("%d\r\n",3);
 
 while( (HWREG(SOC_SPI_1_REGS + SPI_SPIBUF) & 0x80000000 ) );
 //UARTprintf("%d\r\n",5);
 *sp2RxBuffer = SPIDataReceive(SOC_SPI_1_REGS);
 sp2RxBuffer++;
 
 // UARTprintf("%d\r\n",4);
 
 }
 if(NumByteToRead == 1)
 {
 while( (HWREG(SOC_SPI_1_REGS + SPI_SPIBUF) & 0x80000000 ) );
 
 
 *sp2RxBuffer = SPIDataReceive(SOC_SPI_1_REGS);
 sp2RxBuffer++;
 
 }
 }
 
 }
 void SPIInit(void)
 {
 unsigned char cs  = 0x01;
 unsigned char dcs = 0x01;
 unsigned int  val = SIMO_SOMI_CLK_CS;
 
 SPIReset(SOC_SPI_1_REGS);//复位
 
 SPIOutOfReset(SOC_SPI_1_REGS);//取消复位
 
 SPIModeConfigure(SOC_SPI_1_REGS, SPI_SLAVE_MODE);// 主/从模式选择
 
 SPIClkConfigure(SOC_SPI_1_REGS, 228000000, 10000000, SPI_DATA_FORMAT0); //配置时钟
 
 SPIPinControl(SOC_SPI_1_REGS, 0, 0, &val);// 使能 SIMO SOMI CLK 引脚
 
 SPIDefaultCSSet(SOC_SPI_1_REGS, dcs);//设置CS3空闲时为高电平
 
 // 配置 SPI 数据格式
 SPIDataFormatConfig(SPI_DATA_FORMAT0);
 
 // 配置 SPI 数据格式及片选信号
 SPIDat1Config(SOC_SPI_1_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), cs);
 
 // 映射中断到 INT1
 //SPIIntLevelSet(SOC_SPI_1_REGS, SPI_RECV_INTLVL | SPI_TRANSMIT_INTLVL);
 
 // 使能 SPI
 SPIEnable(SOC_SPI_1_REGS);
 
 // 配置管脚为输出状态
 //GPIODirModeSet(SOC_GPIO_0_REGS, 111, GPIO_DIR_OUTPUT);  // GPIO6[14]
 }
 | 
 |