CODE_LINUX_APP_1553B

主要用途:该IP为1553B的API库,实现1553B设备的初始化,设置发送消息,读取命令字和读取1553B数据的函数。

能力分类:嵌入式

应用领域:安防监控,便携产品,机器人,健康医疗,智能家居

交易方式: 定制

参考价格:50000.00 小贴士:当前佣金是0%

好评率:100%| 综合评分:5.0| 已购买:0次
联系我 收藏店铺
分享: 

 模块描述

1.1  原理及方式

IP核为1553B的驱动和API库,支持BC/RT/BM通信。其中1553b.c为API库,其他C源文件为驱动代码。

1.2  主要功能

IP为1553BAPI库,实现1553B设备的初始化,设置发送消息,读取命令字和读取1553B数据的函数。

 标准模块

 模块设计

结构体设计

1. Struct b1553的结构来存储传入的1553B配置参数,包括工作模式、通道号、SPI设备名称和模式,设备地址等

typedef  struct b1553{

dll_t  node;

devClass    class;//must be here after node

Type1553B  uiMode;  //工作模式:bc rt bm

int16 devNum;

int8 channel;

int fdspi;

const char *spiname;

int spimode;

struct spi_ioc_transfer * tr;

uint8 devAddr;//device address,0~31 is RT address, 32 is BC, 33 is BM

}obj1553B;

 

2. 定义1553B的三种工作模式

typedef enum {

BC,

RT,

BM,

}Type1553B;

 

3. 定义1553B的控制命令结构体

typedef struct cmd{

CORE_U16   rtAddr;

CORE_U16   subAddr;

CORE_U16   tr;

CORE_U16   wc;

CORE_U16 bufferId;

}command;

 

 

主要函数说明

1553B初始化函数

函数原型

obj1553B *  b1553_init( int spimode, uint8 devAddr )

功能描述

初始化1553B设备

输入参数

int spimodeSPI模式,包括SPI_TX_QUADSPI_TX_DUALSPI_RX_QUADSPI_RX_DUALSPI_LOOP等;

uint8 devAddr 1553B设备地址,RT0~31BC32BM33

 

输出参数

全局变量值的变化

返回值

NULL-失败;

1553B设备指针-成功。

 

RT设置发送消息函数

函数原型

STATUS  rt_set_msg(

obj1553B * obj,

CORE_U16 tr,

CORE_U16 sa,

CORE_RT_SA_BUFFER  * sa_buffer,

CORE_U16 *data_wds,  

CORE_U8 len)

功能描述

设置需要发送数据,仅RT

输入参数

obj1553B * obj:初始化返回的1553B设备指针

CORE_U16 tr 发送接收数据指示,0接收,1发送;

CORE_U16 sa发送子地址范围1~30

CORE_RT_SA_BUFFER  * sa_buffer:消息缓冲区;

CORE_U16 *data_wds发送数据缓冲;

CORE_U8 len发送数据个数范围1~32

 

输出参数

全局变量值的变化

返回值

ERROR -失败;

OK-成功。

 

RT读取命令字函数

函数原型

STATUS  rt_read_cmd(obj1553B * obj, command *cmd)

功能描述

设置需要发送数据,仅RT

输入参数

obj1553B * obj:初始化返回的1553B设备指针

 

输出参数

command *cmd 读取到的命令字;

全局变量值的变化

返回值

ERROR -失败;

OK-成功。

 

RT读取数据函数

函数原型

CORE_U16  rt_read_msg(

obj1553B * obj,

command*cmd,  CORE_RT_SA_BUFFER *buffer)

功能描述

读取接收到的数据,仅RT

输入参数

obj1553B * obj:初始化返回的1553B设备指针

command *cmd消息命令字

输出参数

CORE_RT_SA_BUFFER *buffer数据缓冲,存取读取到数据

全局变量值的变化

返回值

ERROR -失败;

OK-成功。

 

 类定义

应用举例

基于API实现能够测试基于1553B的数据收发协议

 

STATUS rt_play(obj1553B * obj, uint32 count)

{

    CORE_U16  i;

    int chk = 0;

    int gTime = 0;

        STATUS ret = OK;

        int index  =0;

        int flag = 0;

        CORE_U16 data_wds[32];

        CORE_RT_SA_BUFFER sa_buffer;

        command cmd;

    init_cmpdata();

    memset(&cmd, 0, sizeof(cmd));

    for(i = 0; i < 32; ++i) data_wds[i] = 0xAB00 + i;

 

    rt_set_msg(obj, 0,1, &sa_buffer, data_wds, 32);

 

  /* Start RT */

OUT_MSG("Starting RT  . . .\n");

CORE_RT_Start(obj->devNum, obj->channel);

 

     /* poll to receive data until success */

    while(1)

    {

if(OK == rt_read_cmd(obj,  &cmd))

{

    ++gTime;

if ((cmd.tr == 0) && cmd.subAddr == 1)

{

 

/* read the data from BC */

memset(&sa_buffer, 0, sizeof(sa_buffer));

         ret = rt_read_msg(obj, &cmd, &sa_buffer);

        if (ret > 0)

       {

          chk =  check(index, &sa_buffer.data_wds[0],  ret);

          index = (index + 1) & 0x03 ;

      if(0 == chk)

      {/* receive wrong data */

         OUT_MSG("RT1 Receive Data:\n");

 for (i=0; i< ret; i++)

 {

OUT_MSG("%04X ", sa_buffer.data_wds[i]);

if (!((i+1)%8)) OUT_MSG("\n");

 }

OUT_MSG("\n");

    OUT_MSG("Command Word = %04X\n", sa_buffer.cmd_wd);

      flag = 1;

       }

     }

      /* send data to BC */

     rt_set_msg(obj,1,2, &sa_buffer, data_wds, 32);

 }

 }

 

 if(count == gTime) break;

 

    }//end while

        if (1 == flag)   ret = ERROR;

        else   ret  = OK;

return ret;

}

 

其他


总体评价

好评率:100%

好评数量:0

总体评分

工作速度:5分

工作质量:5分

工作态度:5分

暂无评价

企业其他能力

More>