/****************************************************************************/
/* */
/* 主函数 */
/* */
/****************************************************************************/
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", 6,rx_data[6]);
UARTprintf("SPI_A9[%d] = %d\r\n", 6,rx_data[1]);
UARTprintf("SPI_A9[%d] = %d\r\n", 6,rx_data[2]);
}
//UARTprintf("SPI_A9[%d] = %d\r\n", 10,rx_data[10]);//GPIOPinWrite(SOC_GPIO_0_REGS, 6, GPIO_PIN_LOW);
}
}
/****************************************************************************/
/* */
/* SPI 初始化 */
/* */
/****************************************************************************/
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]
}
/****************************************************************************/
/* */
/* SPI 传输 */
/* */
/****************************************************************************/
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;
}
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();
}
}
/****************************************************************************/
/* */
/* SPI 传输2 */
/* */
/****************************************************************************/
void SPI1_Communicate(uint8_t * sp2TxBuffer, uint8_t * sp2RxBuffer, int NumByteToRead)
{
NumByteToRead++;
SPIDat1Config(SOC_SPI_1_REGS, SPI_DATA_FORMAT0, 0x1);
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++;
// }
}
}
|