[PIC32/SAM] ATSAMD51板子驱动SPI接口网口W5500的问题

[复制链接]
2518|31
 楼主| 比神乐 发表于 2023-2-2 19:32 | 显示全部楼层 |阅读模式
我先写的TCP客户端程序,可以拼通板子,但是读写寄存器都不对,莫名其妙。
我建了一个Harmony 3的工程,谁知生成的代码太难懂了,调用起来很不方便。
我自己写了几个
  1. void SERCOM6_SPI_Write(unsigned char pTransmitData)
  2. {
  3.     if(SERCOM6_SPI_IsTransmitterBusy()==false)
  4.     {
  5.         SERCOM6_REGS->SPIM.SERCOM_DATA=pTransmitData;
  6.         while((SERCOM6_REGS->SPIM.SERCOM_INTFLAG&0x02)==0);
  7.         SERCOM6_REGS->SPIM.SERCOM_INTFLAG|=0x02;
  8.     }
  9. }


这是写一个字节函数。
  1. uint8_t SERCOM6_SPI_Read(void)
  2. {
  3.     uint8_t temp;
  4.     if(SERCOM6_SPI_IsTransmitterBusy()==false)
  5.     {
  6.         while((SERCOM6_REGS->SPIM.SERCOM_INTFLAG&0x04)==0);
  7.         temp=SERCOM6_REGS->SPIM.SERCOM_DATA;
  8.         return temp;
  9.     }
  10.     return 0;
  11. }


这是读一个字节函数。
  1. uint8_t SERCOM6_SPI_Read1(void)
  2. {
  3.     uint8_t temp;
  4.    
  5.     temp=SERCOM6_REGS->SPIM.SERCOM_DATA;
  6.     return temp;
  7. }


这是虚读。
把它们放在w5500.c的函数里调用
  1. void SPI1_Send_Byte(unsigned char dat)
  2. {   
  3.     SERCOM6_SPI_Write(dat);
  4. }
这是SPI写一个字节。
  1. unsigned char Read_W5500_1Byte(unsigned short reg)
  2. {
  3.         unsigned char i;
  4.    
  5.        
  6.         GPIO_PC06_Clear();                       
  7.         SPI1_Send_Short(reg);//ͨ¹ýSPI1д16λ¼Ä´æÆ÷µØÖ·
  8.         SPI1_Send_Byte(FDM1|RWB_READ|COMMON_R);//ͨ¹ýSPI1д¿ØÖÆ×Ö½Ú,1¸ö×Ö½ÚÊý¾Ý³¤¶È,¶ÁÊý¾Ý,Ñ¡ÔñͨÓüĴæÆ÷


  9.         i=SERCOM6_SPI_Read1();
  10.         i=SERCOM6_SPI_Read();
  11.     GPIO_PC06_Set();
  12.         return i;//·µ»Ø¶ÁÈ¡µ½µÄ¼Ä´æÆ÷Êý¾Ý
  13. }
读W5500一个字节。
还有,我看了数据手册,把初始化也改了
  1. void SERCOM6_SPI_Initialize(void)
  2. {
  3.     /* Instantiate the SERCOM6 SPI object */
  4.     sercom6SPIObj.callback = NULL ;
  5.     sercom6SPIObj.transferIsBusy = false ;
  6.     sercom6SPIObj.txSize = 0U;
  7.     sercom6SPIObj.rxSize = 0U;

  8.     /* Selection of the Character Size and Receiver Enable */
  9.     //SERCOM6_REGS->SPIM.SERCOM_CTRLB = SERCOM_SPIM_CTRLB_CHSIZE_8_BIT | SERCOM_SPIM_CTRLB_RXEN_Msk ;
  10.     SERCOM6_REGS->SPIM.SERCOM_CTRLB = 0x0002C200;
  11.     /* Wait for synchronization */
  12.     while((SERCOM6_REGS->SPIM.SERCOM_SYNCBUSY) != 0U)
  13.     {
  14.         /* Do nothing */
  15.     }

  16.     /* Selection of the Baud Value */
  17.     SERCOM6_REGS->SPIM.SERCOM_BAUD = (uint8_t)SERCOM_SPIM_BAUD_BAUD(SERCOM6_SPIM_BAUD_VALUE);

  18.     /* Configure Data Out Pin Out , Master Mode,
  19.      * Data In and Pin Out,Data Order and Standby mode if configured
  20.      * and Selection of the Clock Phase and Polarity and Enable the SPI Module
  21.      */
  22.     //SERCOM6_REGS->SPIM.SERCOM_CTRLA = SERCOM_SPIM_CTRLA_MODE_SPI_MASTER | SERCOM_SPIM_CTRLA_DOPO_PAD0 | SERCOM_SPIM_CTRLA_DIPO_PAD0 | SERCOM_SPIM_CTRLA_CPOL_IDLE_LOW | SERCOM_SPIM_CTRLA_CPHA_LEADING_EDGE | SERCOM_SPIM_CTRLA_DORD_MSB | SERCOM_SPIM_CTRLA_ENABLE_Msk | SERCOM_SPIM_CTRLA_RUNSTDBY_Msk;
  23.     //SERCOM6_REGS->SPIM.SERCOM_CTRLA = 0x0030018e;
  24.     SERCOM6_REGS->SPIM.SERCOM_CTRLA = 0x0130018e;
  25.     /* Wait for synchronization */
  26.     while((SERCOM6_REGS->SPIM.SERCOM_SYNCBUSY) != 0U)
  27.     {
  28.         /* Do nothing */
  29.     }
  30.     SERCOM6_REGS->SPIM.SERCOM_CTRLC = 0x00000000;
  31.     /* Wait for synchronization */
  32.     while((SERCOM6_REGS->SPIM.SERCOM_SYNCBUSY) != 0U)
  33.     {
  34.         /* Do nothing */
  35.     }
  36.     SERCOM6_REGS->SPIM.SERCOM_DBGCTRL=0;
  37.     /* Wait for synchronization */
  38.     while((SERCOM6_REGS->SPIM.SERCOM_SYNCBUSY) != 0U)
  39.     {
  40.         /* Do nothing */
  41.     }
  42. }
我不知道到底是初始化不对还是时序哪里有问题。请高手指教,谢谢!

 楼主| 比神乐 发表于 2023-2-6 14:49 | 显示全部楼层
我读W5500版本寄存器
默认为4.
我把初始化改了又改,读出来不是1就是2,怎么都不对。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
timfordlare 发表于 2023-2-7 20:44 | 显示全部楼层
程序不能运行的吗?              
primojones 发表于 2023-2-7 22:14 | 显示全部楼层
如何组成局域网?               
 楼主| 比神乐 发表于 2023-2-8 08:43 | 显示全部楼层
timfordlare 发表于 2023-2-7 20:44
程序不能运行的吗?

运行不对,改成模拟时序就好啦
 楼主| 比神乐 发表于 2023-2-8 08:44 | 显示全部楼层

不知道
51xlf 发表于 2023-2-8 21:37 | 显示全部楼层
w5500 怎么建立两个socket
jtracy3 发表于 2023-2-10 11:15 | 显示全部楼层
这个有什么问题?              
 楼主| 比神乐 发表于 2023-2-10 22:45 | 显示全部楼层
jtracy3 发表于 2023-2-10 11:15
这个有什么问题?

已经搞好了
vivilyly 发表于 2023-2-11 14:47 | 显示全部楼层
W5500加ATSAMD51能进行高频信号采集吗
 楼主| 比神乐 发表于 2023-2-11 15:02 | 显示全部楼层
vivilyly 发表于 2023-2-11 14:47
W5500加ATSAMD51能进行高频信号采集吗

没试过。
sesefadou 发表于 2023-2-11 15:36 | 显示全部楼层
这个w5500的最大的传输速度是多少?
 楼主| 比神乐 发表于 2023-2-11 16:17 | 显示全部楼层
手册上说:W5500 的使用了
新的高效 SPI 协议支持 80MHz 速率
burgessmaggie 发表于 2023-2-11 20:47 | 显示全部楼层
ATSAMD51+w5500如何显示本地图片
nomomy 发表于 2023-2-16 13:15 | 显示全部楼层
phy和w5500哪个性能好              
robincotton 发表于 2023-3-9 12:48 | 显示全部楼层
推荐使用wifi吧,那个很简单。
updownq 发表于 2023-3-10 10:06 | 显示全部楼层
Atsamd是at芯片吗?               
ccook11 发表于 2023-3-10 10:47 | 显示全部楼层
w5500+snmp可以实现这个。
juliestephen 发表于 2023-3-10 10:51 | 显示全部楼层
W5500做客户端连接硬件?               
vivilyly 发表于 2023-3-10 11:05 | 显示全部楼层
如何实现w5500 udp广播
您需要登录后才可以回帖 登录 | 注册

本版积分规则

470

主题

3537

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部