[MCU] STM8+SI4464

[复制链接]
1938|14
 楼主| wangchuanwei 发表于 2017-6-21 11:57 | 显示全部楼层 |阅读模式
如题,本人在调试公司的一块板子是SPI通信的SI4464,用的WDS生成的库文件,目前读取器件的信息,也就是写寄存器,读取寄存器都正常,也就是说SPI通信是可以的,现在就是接收不到数据,进入不来中断,求大神指导
 楼主| wangchuanwei 发表于 2017-6-21 11:58 | 显示全部楼层
void SI446X_PART_INFO( u8 *buffer )
{
    u8 cmd = PART_INFO;

    SI446X_CMD( &cmd, 1 );
    SI446X_READ_RESPONSE( buffer, 8 );

}

void SI446X_INT_STATUS( u8 *buffer )
{
    u8 cmd[4];
    cmd[0] = GET_INT_STATUS;
    cmd[1] = 0;
    cmd[2] = 0;
    cmd[3] = 0;
    SI446X_CMD( cmd, 4 );
    SI446X_READ_RESPONSE( buffer, 9 );
}
 楼主| wangchuanwei 发表于 2017-6-21 11:59 | 显示全部楼层
SI446X_PART_INFO  可以读取芯片信息 4464
   SI446X_INT_STATUS( buffer );
        if( buffer[3] & ( 1<<4 ) )
          {
            //收到一个数据包,翻转LED
然后就进入接受模式之后  就一直读取中断寄存器那里,就是收不到数据。
 楼主| wangchuanwei 发表于 2017-6-21 16:57 | 显示全部楼层
694844985 发表于 2017-6-22 09:05 | 显示全部楼层
你初始化配置有问题,你有没有进行接收初始化,然后清中断

评分

参与人数 1威望 +2 收起 理由
wangchuanwei + 2 很给力!

查看全部评分

 楼主| wangchuanwei 发表于 2017-6-22 09:38 | 显示全部楼层
694844985 发表于 2017-6-22 09:05
你初始化配置有问题,你有没有进行接收初始化,然后清中断

SI446X_INT_STATUS() 这个函数就是清中断 然后读取中断状态的, 这个命令就可以清除中断,
 楼主| wangchuanwei 发表于 2017-6-22 09:39 | 显示全部楼层
694844985 发表于 2017-6-22 09:05
你初始化配置有问题,你有没有进行接收初始化,然后清中断

大哥,您知不知道SI4463和SI4464用起来有没有区别,我这代码demo是模块厂商给的,后来我们自己画的板子,买的SI4464
 楼主| wangchuanwei 发表于 2017-6-22 09:40 | 显示全部楼层
void SI446X_START_RX( u8 channel, u8 condition, u32 rx_len,
                      u8 n_state1, u8 n_state2, u8 n_state3 )
{
    unsigned char cmd[8];
    SI446X_RX_FIFO_RESET( );
    SI446X_TX_FIFO_RESET( );

    SI446X_CHANGE_STATE( 2 );
    while( SI446X_GET_DEVICE_STATE( ) != 2 );
    SI446X_CHANGE_STATE( 6 );
    while( SI446X_GET_DEVICE_STATE( ) != 6 );
    cmd[0] = START_RX;
    cmd[1] = channel;
    cmd[2] = condition;
    cmd[3] = rx_len>>8;
    cmd[4] = rx_len;
    cmd[5] = n_state1;
    cmd[6] = n_state2;
    cmd[7] = n_state3;
    SI446X_CMD( cmd, 8 );
}
这个是接收初始化的函数
 楼主| wangchuanwei 发表于 2017-6-22 09:45 | 显示全部楼层
int main( void )
{
    u8 i,length;
    BSP_INIT ( );
    SI446X_RESET( );   
   
    //SI446X 模块复位
    SI446X_CONFIG_INIT( );                          //寄存器初始化,寄存器来自WDS配置的头文件
    //SI446X_SET_POWER( 0x7F );                       //将输出功率配置为最大
    SI446X_START_RX( 0, 0, PACKET_LENGTH,0,8,8 );   //进入接收模式,参数定义详见API手册
  while (1)
  {
       //读取寄存器状态
        SI446X_INT_STATUS( buffer );
        if( buffer[3] & ( 1<<4 )  )       //收到数据            
          {
           length = SI446X_READ_PACKET( buffer );
            //收到的数据是0-9,比较是否收到正确。
            for( i = 0;  i < 10; i ++ )
            {
                if( buffer[i] != i )

、、我在main函数  初始化之后,循环里面直接读取寄存器状态,然后看有没有收到数据,这样不可以么
 楼主| wangchuanwei 发表于 2017-6-22 10:15 | 显示全部楼层
int main( void )
{
    u8 i,length;
    BSP_INIT ( );
    SI446X_RESET( );   
   
    //SI446X 模块复位
    SI446X_CONFIG_INIT( );                          //寄存器初始化,寄存器来自WDS配置的头文件
    //SI446X_SET_POWER( 0x7F );                       //将输出功率配置为最大
    SI446X_START_RX( 4, 4, PACKET_LENGTH,0,8,8 );   //进入接收模式,参数定义详见API手册
  while (1)
  {
       //读取寄存器状态
        SI446X_INT_STATUS( buffer );
        if( buffer[3] & ( 1<<4 )  )       //收到数据            
          {
           length = SI446X_READ_PACKET( buffer );
            //收到的数据是0-9,比较是否收到正确。
            for( i = 0;  i < 10; i ++ )
            {
                if( buffer[i] != i )
                {
                  
                    break;
                }
            }
              return 0;
          }
        else SI446X_START_RX( 4, 4, PACKET_LENGTH,0,8,8 );
  }
}



手动置顶,跪求大神,
694844985 发表于 2017-6-22 13:23 | 显示全部楼层
你没有用irq中断引脚么,中断来了才能有数据来,另外你进入接收模式后有没有清中断
 楼主| wangchuanwei 发表于 2017-6-22 14:21 | 显示全部楼层
694844985 发表于 2017-6-22 13:23
你没有用irq中断引脚么,中断来了才能有数据来,另外你进入接收模式后有没有清中断 ...

那个引脚没用,没检测引脚的高低电平
 楼主| wangchuanwei 发表于 2017-6-26 15:23 | 显示全部楼层
lingwise 发表于 2017-7-3 15:21 | 显示全部楼层
需要配合中断引脚来使用才省单片机资源,要做低功耗更是离不开中断引脚的功能
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

296

帖子

2

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