主模式示例

## 主模式示例 ```language /** * @file spi_master_demo.c * @ingroup peripheral * @brief SPI主设备工作模式Demo * ***********************************************************************************/ #include "softap_api.h" #if DEMO_TEST #include "xy_peripheral.h" //these define are provide a modification for user #define SPI_MOSI_PIN GPIO_PIN_NUM_6 #define SPI_MISO_PIN GPIO_PIN_NUM_7 #define SPI_SCLK_PIN GPIO_PIN_NUM_8 #define SPI_NSS1_PIN GPIO_PIN_NUM_9 #define SPI_NSS2_PIN GPIO_PIN_NUM_18 #define SPI_CLK_DIV SPI_CLK_DIV_16 //can use: 2 4 8 16 32 64 128 256 #define SPI_WORK_MODE SPI_WORK_MODE_0 //can use: 0 1 2 3 #define SPI_DATA_WIDTH SPI_DATA_WIDTH_8 //can use: 8 16 32 #define SPI_MASTER_TASK_PRIORITY 10 #define SPI_MASTER_STACK_SIZE 500 UINT32 g_spi_master_TskHandle = -1; /** * @brief SPI中断服务函数 * @code * xy_SPI_ChipSelect(SPI1, SPI_NSS_PIN_1); tmp = xy_SPI_RW_Data(SPI1, SPI_DATA_WIDTH, 0x5A); xy_SPI_ChipSelect(SPI1, SPI_NSS_NONE); xy_SPI_ChipSelect(SPI1, SPI_NSS_PIN_2); tmp = xy_SPI_RW_Data(SPI1, SPI_DATA_WIDTH, 0xA5); xy_SPI_ChipSelect(SPI1, SPI_NSS_NONE); * @endcode * */ void user_hook_spi_master_handler(void) { uint32_t tmp; xy_SPI_ChipSelect(SPI1, SPI_NSS_PIN_1); tmp = xy_SPI_RW_Data(SPI1, SPI_DATA_WIDTH, 0x5A); xy_SPI_ChipSelect(SPI1, SPI_NSS_NONE); xy_SPI_ChipSelect(SPI1, SPI_NSS_PIN_2); tmp = xy_SPI_RW_Data(SPI1, SPI_DATA_WIDTH, 0xA5); xy_SPI_ChipSelect(SPI1, SPI_NSS_NONE); xy_sleep(10); } /** * @brief SPI初始化函数 * @note 在配置IO前需要清空配置寄存器并开启外设时钟 * * @code * xy_PRCM_ClockCmd(PRCM_CKG_CTL_SPI1, ENABLE); xy_PRCM_ClockCmd(PRCM_CKG_CTL_GPIO, ENABLE); xy_GPIO_ClearConfig(SPI_MISO_PIN); xy_GPIO_ClearConfig(SPI_MOSI_PIN); xy_GPIO_ClearConfig(SPI_SCLK_PIN); xy_GPIO_ClearConfig(SPI_NSS1_PIN); xy_GPIO_ClearConfig(SPI_NSS2_PIN); xy_GPIO_Remapping(SPI_SCLK_PIN, REMAP_SPI_SCLK); xy_GPIO_Remapping(SPI_MISO_PIN, REMAP_SPI_MISO); xy_GPIO_Remapping(SPI_MOSI_PIN, REMAP_SPI_MOSI); xy_GPIO_Remapping(SPI_NSS1_PIN, REMAP_SPI_NSS1); xy_GPIO_Remapping(SPI_NSS2_PIN, REMAP_SPI_NSS2); xy_GPIO_SetIOMode(SPI_SCLK_PIN, GPIO_MODE_HW_PER); xy_GPIO_SetIOMode(SPI_MISO_PIN, GPIO_MODE_HW_PER); xy_GPIO_SetIOMode(SPI_MOSI_PIN, GPIO_MODE_HW_PER); xy_GPIO_SetIOMode(SPI_NSS1_PIN, GPIO_MODE_HW_PER); xy_GPIO_SetIOMode(SPI_NSS2_PIN, GPIO_MODE_HW_PER); xy_SPI_MasterInit(SPI1, SPI_CLK_DIV, SPI_WORK_MODE, SPI_DATA_WIDTH); //xy_SPI_Delay_Set(SPI1, 0, 0, 0, 0); xy_SPI_Cmd(SPI1, ENABLE); * @endcode * */ void spi_master_gpio_init(void) { xy_PRCM_ClockCmd(PRCM_CKG_CTL_SPI1, ENABLE); xy_PRCM_ClockCmd(PRCM_CKG_CTL_GPIO, ENABLE); xy_GPIO_ClearConfig(SPI_MISO_PIN); xy_GPIO_ClearConfig(SPI_MOSI_PIN); xy_GPIO_ClearConfig(SPI_SCLK_PIN); xy_GPIO_ClearConfig(SPI_NSS1_PIN); xy_GPIO_ClearConfig(SPI_NSS2_PIN); xy_GPIO_Remapping(SPI_SCLK_PIN, REMAP_SPI_SCLK); xy_GPIO_Remapping(SPI_MISO_PIN, REMAP_SPI_MISO); xy_GPIO_Remapping(SPI_MOSI_PIN, REMAP_SPI_MOSI); xy_GPIO_Remapping(SPI_NSS1_PIN, REMAP_SPI_NSS1); xy_GPIO_Remapping(SPI_NSS2_PIN, REMAP_SPI_NSS2); xy_GPIO_SetIOMode(SPI_SCLK_PIN, GPIO_MODE_HW_PER); xy_GPIO_SetIOMode(SPI_MISO_PIN, GPIO_MODE_HW_PER); xy_GPIO_SetIOMode(SPI_MOSI_PIN, GPIO_MODE_HW_PER); xy_GPIO_SetIOMode(SPI_NSS1_PIN, GPIO_MODE_HW_PER); xy_GPIO_SetIOMode(SPI_NSS2_PIN, GPIO_MODE_HW_PER); xy_SPI_MasterInit(SPI1, SPI_CLK_DIV, SPI_WORK_MODE, SPI_DATA_WIDTH); //xy_SPI_Delay_Set(SPI1, 0, 0, 0, 0); xy_SPI_Cmd(SPI1, ENABLE); } /** * @brief SPI工作函数 * */ void spi_master_work_task(void) { while(1) { user_hook_spi_master_handler(); } } /** * @brief 这个函数为I2Cdemo提供了一个工作线程 * * @return UINT32 */ UINT32 spi_master_work_task_init(void) { UINT32 uwRet = LOS_NOK; uwRet = xy_TaskCreate((TaskFunc_t)spi_master_work_task, "spi_master_work_task", SPI_MASTER_STACK_SIZE, NULL, SPI_MASTER_TASK_PRIORITY, &g_spi_master_TskHandle); return uwRet; } #endif ```