查看: 1700|回复: 0

【SAMV71 XPlained】+MDK 5.1+USART+SPI

[复制链接]

该用户从未签到

发表于 2015-12-17 09:39:10 | 显示全部楼层 |阅读模式
分享到:
USART和UART有什么区别呢?

1.USART的全称为:Universal Synchronous  Asynchronous Receiver Transceiver(通用同步异步接收器收发器),而UART的全称为:Universal  Asynchronous Receiver Transmitter(通用异步接收器收发器),这两者相差一个同步接收和发送功能。
2.另外UART是两线通信,一条线是发送数据,另外一条线是接收数据,没有作为同步接收者和发生者的时钟线,但USART就不是这样,他有多条线。
3.再者USART可以被配置成多种模式,比如SPI MASTER, SPI SLAVE,RS485 控制信号,LIN……
官方提供了将USART配置成master或者slave模式下的SPI和板子上的SPI0通信的实验例程,这些例程都非常的详细,甚至将如何接线等问题都在程序中清楚地标记了出来:

  • * - <b> USART0 -- SPI0 </b> (for USART0 as SPI master)
  • *   - SCK0(PB13 pin05 on J400)         - SCK (SCK on J506)
  • *   - TXD0(PB01 pin14 on EXT1)         - MOSI (MOSI on J506)
  • *   - RXD0(PB00 pin13 on EXT1)         - MISO (MISO on J506)
  • *   - RTS0(PB03 PIN05 on EXT1)         - NSS (PB02 pin06 on EXT1)
  • *
  • * - <b> USART0 -- SPI0 </b> (for USART0 as SPI slave)
  • *   - SCK0(PB13 pin05 on J400)         - SCK (SCK on J506)
  • *   - RXD0(PB00 pin13 on EXT1)         - MOSI (MOSI on J506)
  • *   - TXD0(PB01 pin14 on EXT1)         - MISO (MISO on J506)
  • *   - CTS0(PB02 PIN06 on EXT1)         - NPCS1(PD25 pin15 on EXT1)
有了这些甚至不用去对照原理图就可以直接在板子上找到相应的插针,接好电器特性。




输入M,将USART配置为SPI MASTER ,SP0接收到的数据如下:




使用逻辑分析仪抓取spi的通信逻辑信号:



放大上面的信号查看:










先来看一下将USART配置为spi master 发送数据给SPI0的这部分。在主函数的while的死循环中不断的获取串口发来的字符,如果获得了‘m’或者‘M’执行下面这段代码,配置相应的管脚,配置USART为SPI MASTER ,SPI0为salve。
SPI_EnableIt(SPI, SPI_IER_RDRF); //使能SPI0接收数据的所有中断
SPI_Enable(SPI); //使能SPI0
USART_EnableIt(USART, UART_IER_RXRDY); //使能USART的数据接收中断

  • case 'm': case 'M':
  •             {
  •              PIO_Configure( pins1, PIO_LISTSIZE( pins1 ) ) ;           // Configure pins
  •              _ConfigureUsartAsSpiMaster();                       // Configure USART as SPI master
  •              _ConfigureSpiSlave();                           // Configure SPi slave

  •              printf( "-I- Configure USART as spi master ...\n\r" ) ;

  •              SPI_EnableIt(SPI, SPI_IER_RDRF);
  •              SPI_Enable(SPI);
  •              USART_EnableIt(USART, UART_IER_RXRDY);

  •              for (i = 0;(pTxBuffer1!='\0' && pTxBuffer2!='\0'); i++)
  •              {
  •                while ( (SPI->SPI_SR & SPI_SR_TXEMPTY) == 0 ) ;
  •                SPI->SPI_TDR = ((uint16_t)pTxBuffer2) | SPI_PCS( 0 ) ;
  •                USART_Write( USART, pTxBuffer1, 0);
  •              }
  •              break ;
  •             }
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

手机版|小黑屋|与非网

GMT+8, 2024-11-19 02:26 , Processed in 0.122699 second(s), 18 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.