SJA1000中断处理与CANBus通信
需积分: 26 29 浏览量
更新于2024-09-11
1
收藏 80KB DOC 举报
"这篇代码是关于SJA1000 CAN总线控制器的中断处理和初始化函数。SJA1000是一种广泛使用的CAN(Controller Area Network)接口芯片,用于在嵌入式系统中实现串行通信。代码主要涉及中断服务函数、MCU初始化以及主程序的流程。"
SJA1000源代码中展示了如何处理中断事件,特别是接收和发送中断。`SJA_INTR`函数是中断服务例程,它被中断0(INTR0)触发,即当SJA1000芯片产生中断时调用。在中断服务函数中,首先关闭总中断和外部中断,然后读取中断寄存器IR(Interrupt Register)的值来识别中断类型。如果IR的值为0xe2,表示发送中断发生,此时会熄灭LED1,表明有信息已发送。如果IR的值为0xe1,表示接收中断,LED2会被熄灭,并调用`receive_now()`函数处理接收到的数据。对于其他未处理的中断,代码执行`MCU_init()`函数,这可能包含复位SJA1000的操作。
`MCU_init`函数用于初始化MCU的相关配置,如设置SJA1000的片选信号(SJA_CS)和其他中断设置。这个函数中,SJA_CS被拉低以选中SJA1000,外部中断0(EX0)开启,IT0(外部中断0边沿触发)关闭,且总中断打开。
主程序`main`首先调用`MCU_init`和`SJA1000_init`初始化MCU和SJA1000,然后在发送缓冲区初始化成功后进入发送信息的死循环,等待中断发生。一旦中断发生,`SJA_INTR`将被调用来处理相应的事件。
此外,代码中还定义了一些与SJA1000相关的寄存器值,如BTR0和BTR1用于设置CAN总线的比特率,ACR和AMR用于配置验收滤波,OCR和CDR则用于设置输出时钟和时钟分频。这些值通常需要根据实际应用的需求和系统的物理特性进行调整。
这段代码提供了SJA1000在8051微控制器系统中的基本操作框架,包括中断处理、初始化和通信状态的指示。通过理解这些函数和寄存器设置,开发者可以进一步扩展和定制他们的CAN总线通信系统。
2013-12-27 上传
2021-10-03 上传
2012-09-17 上传
2022-09-24 上传
2017-04-14 上传
2012-01-30 上传
2022-09-21 上传
1W
- 粉丝: 0
- 资源: 17
最新资源
- 高清艺术文字图标资源,PNG和ICO格式免费下载
- mui框架HTML5应用界面组件使用示例教程
- Vue.js开发利器:chrome-vue-devtools插件解析
- 掌握ElectronBrowserJS:打造跨平台电子应用
- 前端导师教程:构建与部署社交证明页面
- Java多线程与线程安全在断点续传中的实现
- 免Root一键卸载安卓预装应用教程
- 易语言实现高级表格滚动条完美控制技巧
- 超声波测距尺的源码实现
- 数据可视化与交互:构建易用的数据界面
- 实现Discourse外聘回复自动标记的简易插件
- 链表的头插法与尾插法实现及长度计算
- Playwright与Typescript及Mocha集成:自动化UI测试实践指南
- 128x128像素线性工具图标下载集合
- 易语言安装包程序增强版:智能导入与重复库过滤
- 利用AJAX与Spotify API在Google地图中探索世界音乐排行榜