带缓冲和信号量的CAN口接收和发送部分见本刊网络补充版()。

接口函数总结如下。

void CanInitHW(UI segment,BYTE irq0,BYTE IRQ1)

/*设置SJA1000控制器端口中断向量*/

int canReleaseHW() /* 清除SJA1000控制器端口中断向量*/

int canSendMsg( CANBYTE port, MSG_STRUCT msg)

/* 向定制SJA1000控制器端口发送数据*/

int canReceiveMsg( CANBYTE port, MSG_STRUCT msg_ptr)

/*从定制SJA1000控制器端口接收数据

int canConfig( CANBYTE port, CAN_STRUCT can)

/*初始化和配置SJA1000控制器 */

int canNormalRun( CANBYTE port )

/*设置SJA1000正常(Normal)运行模式 */

int canReset( CANBYTE port )

/* SJA1000控制器端口重新设置,缓冲区置位0xff*/

CANBYTE can0r( CANBYTE addr)

/*读取SJA1000控制器端口0的定制寄存器的值 */

CANBYTE can1r( CANBYTE addr)

/*读取SJA1000控制器端口1的定制寄存器的值 */

接收和发送数据缓冲区数据结构定义:

typedef struct {

INT16U RingBufRxCtr; /* 接收缓冲中字符数目 */

OS_EVENT RingBufRxSem; /* 接收信号量 */

INT8U RingBufRxInPtr; /* 接收缓冲中下一字符的写入位置 */

INT8U RingBufRxOutPtr; /* 接收缓冲中下一待读出字符的位置 */

INT8U RingBufRx[CAN_RX_BUF_SIZE]; /* 接收环形缓冲区*/

INT16U RingBufTxCtr;

/* 发送缓冲中字符数目 */

OS_EVENT *RingBufTxSem; /* 发送信号量 */

INT8U *RingBufTxInPtr;

/* 发送缓冲中下一字符的写入位置 */

INT8U *RingBufTxOutPtr;

/* 发送缓冲中下一待读出字符的位置 */

INT8U RingBufTx[CAN_TX_BUF_SIZE]; /* 发送环形缓冲区*/

} CAN_RING_BUF;

结 语

本文是在嵌入式计算机技术领域的应用背景下提出的,整个工程开发结束以后,系统正常运作时间超过27天。希望本文的提出对开发嵌入式操作系统的技术人员能有所帮助,同时也希望同一领域的开发人员共同探讨、共同发展。

关于接口,总线,驱动就介绍完了,您有什么想法可以联系小编。

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查