/********************************** (C) COPYRIGHT *******************************
* File Name : Main.c
* Author : WCH
* Version : V1.0
* Date : 2020/08/06
* Description : SPI0演示 Master/Slave 模式数据收发
*********************************************************************************
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
* Attention: This software (modified or not) and binary are used for
* microcontroller manufactured by Nanjing Qinheng Microelectronics.
*******************************************************************************/
#include "CH58x_common.h"
__attribute__((aligned(4))) uint8_t spiBuff[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6};
__attribute__((aligned(4))) uint8_t spiBuffrev[64] = {0};
uint8_t count=0;
void DebugInit(void) // SPI0与例程惯用串口打印引脚冲突,所以此例程改用UART1_输出打印
{
GPIOB_SetBits(GPIO_Pin_13);
GPIOPinRemap(ENABLE, RB_PIN_UART1);
GPIOB_ModeCfg(GPIO_Pin_12, GPIO_ModeIN_PU);
GPIOB_ModeCfg(GPIO_Pin_13, GPIO_ModeOut_PP_5mA);
UART1_DefInit();
}
__HIGH_CODE
void Main_Process(void)
{
if(count)
{
for(uint8_t i=0;i<count;i++)
{
PRINT("%02X ",spiBuffrev[i]);
}
PRINT("\n");
count=0;
}
}
void SPI_INIT(void)
{
/* 设备模式 */
PRINT("1.spi0 mul slave mode \n");
GPIOA_ModeCfg(GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15, GPIO_ModeIN_PU);
SPI0_SlaveInit();
R8_SPI0_CTRL_MOD |= RB_SPI_FIFO_DIR;//设置输入方向
SPI0_ClearITFlag(RB_SPI_IE_BYTE_END);//单字节收发完成中断
SPI0_ITCfg(ENABLE, RB_SPI_IE_BYTE_END);
PFIC_EnableIRQ( SPI0_IRQn );
}
int main()
{
HSECFG_Capacitance(HSECap_18p);
SetSysClock(CLK_SOURCE_HSE_PLL_62_4MHz);
/* 配置串口调试 */
DebugInit();
PRINT("Start @ChipID=%02X\n", R8_CHIP_ID);
SPI_INIT();
DelayMs(100);
while(1)
{
Main_Process();
}
}
/*********************************************************************
* @fn SPI0_IRQHandler
*
* @brief SPI0中断函数
*
* @return none
*/
__INTERRUPT
__HIGH_CODE
void SPI0_IRQHandler(void)
{
if(SPI0_GetITFlag(RB_SPI_IE_BYTE_END))//单字节收发完成中断
{
while(R8_SPI0_FIFO_COUNT)
{
spiBuffrev[count]=R8_SPI0_FIFO;
count++;
}
SPI0_ClearITFlag(RB_SPI_IE_BYTE_END);
}
}