Nuvoton M0518 之 Slave SPI通信注意事项

匿名 (未验证) 提交于 2019-12-03 00:03:02

使用0518芯片的SPI0中断来实现0518芯片模块作为Slave方,使用SPI0接口来接收打印“Master方”发送过来的一个字节数据。

1、SPI0中断处理以及初始化相关源码如下:

uint32_t u32RecvData_spi = 0; // void SPI0_IRQHandler(void) {     /* Check RX EMPTY flag */     while(SPI_GET_RX_FIFO_EMPTY_FLAG(SPI0) == 0)     {         /* Read RX FIFO */         u32RecvData_spi = SPI_READ_RX(SPI0); 		printf("%X\n", u32RecvData_spi);     }     /* Check TX FULL flag and TX data count */     while((SPI_GET_TX_FIFO_FULL_FLAG(SPI0) == 0))     {         /* Write to TX FIFO */ 		SPI_WRITE_TX(SPI0, 0); //用0x00填满FIFO的TX缓存区。     }     /* Check the RX FIFO time-out interrupt flag */     if(SPI_GetIntFlag(SPI0, SPI_FIFO_TIMEOUT_INT_MASK))     {         /* If RX FIFO is not empty, read RX FIFO. */         while(SPI_GET_RX_FIFO_EMPTY_FLAG(SPI0) == 0)             u32RecvData_spi = SPI_READ_RX(SPI0); 		printf("3\n");     } } void SPI0_Init(void) { 	SPI_Open(SPI0, SPI_SLAVE, SPI_MODE_0, 8, NULL); 	 	//SPI_SET_LSB_FIRST(SPI0);// 	//SPI_SET_SUSPEND_CYCLE(SPI0, 16);     //SPI_SET_DATA_WIDTH(SPI0, 24); 	//SPI_SET_LSB_FIRST(SPI0); 	//SPI_DISABLE_BYTE_REORDER(SPI0); 	//SPI_ENABLE_BYTE_REORDER(SPI0); 	//SPI_DISABLE_DUAL_MODE(SPI0); 	//SPI_ENABLE_3WIRE_MODE(SPI0); 	 	/* Enable TX FIFO threshold interrupt and RX FIFO time-out interrupt */     SPI_EnableInt(SPI0, SPI_FIFO_TX_INT_MASK | SPI_FIFO_TIMEOUT_INT_MASK);     NVIC_EnableIRQ(SPI0_IRQn); 	 	SPI_EnableFIFO(SPI0, 0, 0); //开启FiFo模式,这个很重要。 }

2、在SYS_Init()中,需要使能相关的IP时钟:

CLK_EnableModuleClock(SPI0_MODULE); CLK_SetModuleClock(SPI0_MODULE, CLK_CLKSEL1_SPI0_S_HCLK, MODULE_NoMsk); //外部晶振 //CLK_SetModuleClock(SPI0_MODULE, CLK_CLKSEL1_SPI0_S_PLL, MODULE_NoMsk); //内部晶振

3、记得在main()中,调用一下 SPI0_Init();不然没有作用的。 --- VIP here。

 

---- The End.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!