[技术问答] n76E003 穿墙王SI4463或SI4432

[复制链接]
1381|6
 楼主| guofengyu 发表于 2018-12-4 16:42 | 显示全部楼层 |阅读模式
用N76E003 通过SPI与SI4463或SI4432进行通信,无法正常发送和接收,调试一个多星期没什么进展,有没有用过的大神,能发个程序看看
IoTCatcher 发表于 2018-12-4 18:12 | 显示全部楼层
你有下载BSP看下SPI的代码吗?
 楼主| guofengyu 发表于 2018-12-4 19:47 | 显示全部楼层
下载了SPI代码,SPI例程看了之后有点茫然,感觉有点乱,怎么连基本的读写都没有
598330983 发表于 2018-12-4 21:47 | 显示全部楼层
我看例子很好的啊。哪儿乱了,有初始化,有主机模式例程,和从机模式例程,你这个是应该使用主机模式的。
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2017 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Website: http://www.nuvoton.com
  8. //  E-Mail : MicroC-8bit@nuvoton.com
  9. //  Date   : Jan/21/2017
  10. //***********************************************************************************************************

  11. //***********************************************************************************************************
  12. //  File Function: N76E003 SPI in Master mode demo code
  13. //***********************************************************************************************************

  14. #include "N76E003.h"
  15. #include "SFR_Macro.h"
  16. #include "Function_define.h"
  17. #include "Common.h"
  18. #include "Delay.h"

  19. //***********************************************************************************************************
  20. //  Application: SPI Function
  21. //  Master send 0x90 and recevie 0x4E
  22. //  Master send 0x01 and recevie 0x55
  23. //  Master send 0x02 and recevie 0x56
  24. //  Master send 0x03 and recevie 0x4F
  25. //  Master send 0x04 and recevie 0x54
  26. //
  27. //  Master recevie 0x4E and 0x4F form slave after transmitting
  28. //
  29. //  Output : P1.4 & P2.1 flash when SPI pass
  30. //           UART show result on hyper-terminal
  31. //           P0.7 flash when SPI error
  32. //***********************************************************************************************************

  33. #if 0
  34. ///*****************************************************************************************
  35. //* For ADC INIT setting
  36. //*****************************************************************************************/
  37. //#define                SPICLK_DIV2                        clr_SPR0;clr_SPR1
  38. //#define                SPICLK_DIV4                        set_SPR0;clr_SPR1
  39. //#define                SPICLK_DIV8                        clr_SPR0;set_SPR1
  40. //#define                SPICLK_DIV16                set_SPR0;set_SPR1
  41. //#define                Enable_SPI_Interrupt                set_ESPI;set_EA
  42. //#define                SS                P15
  43. #endif

  44. //-----------------------------------------------------------------------------------------------------------
  45. void SPI_Error(void)
  46. {
  47.     printf ("\nSPI error.\n");
  48.     while(1)                                    // SPI error and P0.7 flash/
  49.     {
  50.         P07 = 1;
  51.         Timer0_Delay1ms(500);
  52.         P07 = 0;
  53.         Timer0_Delay1ms(500);
  54.     }
  55.         }
  56. //-----------------------------------------------------------------------------------------------------------
  57. void SPI_Initial(void)
  58. {              
  59.                 P15_Quasi_Mode;                                                                                                                // P15 (SS) Quasi mode
  60.                 P10_Quasi_Mode;                                                                                                                // P10(SPCLK) Quasi mode
  61.                 P00_Quasi_Mode;                                                                                                                // P00 (MOSI) Quasi mode
  62.     P01_Quasi_Mode;                                                                                                                // P22 (MISO) Quasi mode
  63.             
  64.     set_DISMODF;                                                                                                                        // SS General purpose I/O ( No Mode Fault )
  65.     clr_SSOE;
  66.    
  67.     clr_LSBFE;                                                                                                                                // MSB first         

  68.     clr_CPOL;                                                                                                                                        // The SPI clock is low in idle mode
  69.     set_CPHA;                                                                                                                                        // The data is sample on the second edge of SPI clock
  70.    
  71.     set_MSTR;                                                                                                                                        // SPI in Master mode
  72.      
  73.     SPICLK_DIV2;                                                                                                                        // Select SPI clock
  74.     Enable_SPI_Interrupt;                                                                                        // Enable SPI interrupt
  75.     set_SPIEN;                                                                                                                                // Enable SPI function
  76. }
  77. //-----------------------------------------------------------------------------------------------------------
  78. void Start_Sending_SPI(UINT8 *pu8MID,UINT8 *pu8DID)
  79. {
  80.     SS = 0;

  81.     SPDR = 0x90;                                // Send 0x90 to Slave
  82.     PCON |= SET_BIT0;                           // Enter idle mode
  83.     if(SPDR != 0x4E)                            // Receive slave 1st DATA
  84.        SPI_Error();
  85.     printf ("\nSlave Return %c!\n",SPDR);
  86.                                           
  87.     SPDR = 0x01;                                // Send 0x01 to Slave
  88.     PCON |= SET_BIT0;                           // Enter idle mode
  89.     if(SPDR != 0x55)                            // Receive slave 2nd DATA  
  90.        SPI_Error();
  91.     printf ("\nSlave Return %c!\n",SPDR);

  92.     SPDR = 0x02;                                // Send 0x02 to Slave
  93.     PCON |= SET_BIT0;                           // Enter idle mode
  94.     if(SPDR != 0x56)                            // Receive slave 3rd DATA
  95.        SPI_Error();
  96.     printf ("\nSlave Return %c!\n",SPDR);

  97.     SPDR = 0x03;                                // Send 0x03 to Slave
  98.     PCON |= SET_BIT0;                           // Enter idle mode
  99.     if(SPDR != 0x4F)                            // Receive slave 4th DATA
  100.        SPI_Error();
  101.     printf ("\nSlave Return %c!\n",SPDR);

  102.     SPDR = 0x04;                                // Send 0x04 to Slave
  103.     PCON |= SET_BIT0;                           // Enter idle mode
  104.     if(SPDR != 0x54)                            // Receive slave 5th DATA
  105.        SPI_Error();
  106.     printf ("\nSlave Return %c!\n",SPDR);

  107.     SPDR = 0x4F;                  
  108.     PCON |= SET_BIT0;                           // Enter idle mode
  109.     *pu8MID = SPDR;                             // Receive Slave 1st DATA fron Slave      
  110.     printf ("\nSlave Return %c!\n",SPDR);

  111.     SPDR = 0x4E;                  
  112.     PCON |= SET_BIT0;                           // Enter idle mode            
  113.     *pu8DID = SPDR;                             // Receive Slave 2nd DATA from Slave
  114.     printf ("\nSlave Return %c!\n",SPDR);

  115.     SS = 1;   
  116. }
  117. //-----------------------------------------------------------------------------------------------------------
  118. void main(void)
  119. {      
  120.     UINT8 u8MID,u8DID;
  121.    
  122.     Set_All_GPIO_Quasi_Mode;
  123.     InitialUART0_Timer1(115200);             /* 115200 Baud Rate*/

  124.     SPI_Initial();

  125.     printf ("\nSPI Start Transmit...\n");

  126.     Start_Sending_SPI(&u8MID,&u8DID);
  127.         
  128.     if((u8MID != 0x4F)&&(u8DID != 0x4E))
  129.         SPI_Error();

  130.     printf ("\nSPI Test OK!\n");
  131.     while(1)                                    // SPI transmission finish
  132.     {
  133.         P12 = 1;
  134.         Timer0_Delay1ms(500);
  135.         P12 = 0;
  136.         Timer0_Delay1ms(500);
  137.     }
  138. }
  139. //-----------------------------------------------------------------------------------------------------------
  140. void SPI_ISR(void) interrupt 9                  // Vecotr [url=home.php?mod=space&uid=72445]@[/url]  0x4B
  141. {
  142.     clr_SPIF;
  143.     Timer3_Delay10us(1);
  144. }
  145. //-----------------------------------------------------------------------------------------------------------
598330983 发表于 2018-12-4 21:48 | 显示全部楼层
前面的宏定义的内容是用于测试收发的。比如定义的发送什么,要收到什么。来判断是否正确。你可以忽略这部分,你就看初始化,和发送函数和接收函数。
598330983 发表于 2018-12-4 21:53 | 显示全部楼层
楼主如果看不懂例程,很有可能是C语言没有学好啊。我仔细看了一遍,没啥难理解的。这个发送函数你需要变通使用。
因为这个里面传递进去的是地址。是要收内容用的,发送的是个固定书,你看每行的备注。
 楼主| guofengyu 发表于 2018-12-8 09:43 | 显示全部楼层
有没有SI4463在这个平台上的驱动程序?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

11

帖子

1

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