该IP核为1553B的驱动和API库,支持BC/RT/BM通信。其中1553b.c为API库,其他C源文件为驱动代码。
该IP为1553B的API库,实现1553B设备的初始化,设置发送消息,读取命令字和读取1553B数据的函数。
无
l 结构体设计
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; |
l 主要函数说明
函数原型 | obj1553B * b1553_init( int spimode, uint8 devAddr ) |
功能描述 | 初始化1553B设备 |
输入参数 | int spimode:SPI模式,包括SPI_TX_QUAD,SPI_TX_DUAL,SPI_RX_QUAD,SPI_RX_DUAL,SPI_LOOP等; uint8 devAddr: 1553B设备地址,RT:0~31,BC:32,BM:33
|
输出参数 | 无 |
全局变量值的变化 | 无 |
返回值 | NULL-失败; 1553B设备指针-成功。 |
函数原型 | 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-成功。 |
函数原型 | STATUS rt_read_cmd(obj1553B * obj, command *cmd) |
功能描述 | 设置需要发送的数据,仅用于RT |
输入参数 | obj1553B * obj:初始化返回的1553B设备指针;
|
输出参数 | command *cmd: 读取到的命令字; |
全局变量值的变化 | 无 |
返回值 | ERROR -失败; OK-成功。 |
函数原型 | 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分
暂无评价
CPU/GPU ¥12000.00
CPU/GPU ¥25000.00
CPU/GPU ¥10000.00
CPU/GPU ¥30000.00
CPU/GPU ¥10000.00
CPU/GPU ¥15000.00
CPU/GPU ¥10000.00
CPU/GPU ¥10000.00
其他 ¥5000.00
其他 ¥5000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
其他 ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥10000.00
FPGA电路 ¥10000.00
FPGA电路 ¥10000.00
模拟电路 ¥10000.00
模拟电路 ¥5000.00
模拟电路 ¥5000.00
模拟电路 ¥5000.00
模拟电路 ¥10000.00
模拟电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
FPGA电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
DSP电路 ¥10000.00
CPU/GPU ¥20000.00
CPU/GPU ¥20000.00
CPU/GPU ¥20000.00
CPU/GPU ¥20000.00
CPU/GPU ¥15000.00
CPU/GPU ¥20000.00
CPU/GPU ¥18000.00
CPU/GPU ¥20000.00
其他 ¥10000.00
其他 ¥6000.00
其他 ¥2000.00
其他 ¥3000.00
其他 ¥12000.00
其他 ¥8000.00
FPGA电路 ¥5000.00
MCU电路 ¥4800.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
嵌入式 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
MCU电路 ¥50000.00
MCU电路 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥500000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00
其他 ¥50000.00