uart发送程序
### UART发送程序解析与知识点详解 #### 标题与描述概览 标题“uart发送程序”及描述“在nius2上调试成功的一个uart发送程序”揭示了此代码段为一个在NIUS2开发板上运行成功的UART(通用异步收发传输器)发送程序。该程序利用Altera的硬件资源实现数据的串行通信,具体涉及到的数据结构和函数调用均围绕着UART的读写操作、状态检测以及中断处理。 #### 核心知识点分析 1. **头文件导入**: - `#include "system.h"`:系统头文件,通常包含基本的系统定义和常量。 - `#include "altera_avalon_pio_regs.h"`:Altera Avalon外设接口寄存器头文件,用于访问PIO(可编程输入输出)设备的寄存器。 - `#include "alt_types.h"`:提供Altera特定的数据类型,如`alt_u8`、`alt_u16`等,用于硬件编程。 - `#include "altera_avalon_uart_regs.h"`:Avalon UART寄存器头文件,用于访问UART设备的寄存器。 - `#include "altera_avalon_uart.h"`:Avalon UART功能头文件,封装了UART的基本操作。 2. **宏定义**: - `#define SIZE0 sizeof(dat0)`:定义`SIZE0`为`dat0`数组的大小,便于后续代码中动态使用。 - `#define SIZE1 sizeof(dat1)`:同上,但针对`dat1`数组。 3. **静态数据数组**: - `static alt_u8 dat0[] = "uarttestsuccessed";`:定义了一个名为`dat0`的`alt_u8`类型数组,用于存储字符串“uarttestsuccessed”,用于发送测试。 - `static alt_u8 dat1[] = "www.52eda.com";`:定义了另一个名为`dat1`的`alt_u8`类型数组,用于存储网址字符串,同样用于发送测试。 4. **变量声明**: - `static alt_u8 recv[3] = {0};`:接收缓冲区,用于保存接收到的UART数据,长度为3。 - `alt_u16 uart0state;`:UART的状态寄存器值,用于检查UART的当前状态。 - `alt_u16 uart0control;`:UART的控制寄存器值,用于设置或修改UART的操作模式。 - `alt_u8 num;`:计数器,用于追踪接收到的数据数量。 5. **函数声明与实现**: - `HANDLE_UART_0_interrupts()`:中断服务例程,处理来自UART0的中断。检查UART的状态,如果接收准备好则读取数据,如果传输准备好则执行相应操作。 - `alt_main()`:主函数,初始化UART,设置中断,并进入无限循环,依次发送`dat0`和`dat1`中的数据,等待传输完成,并延时。 6. **寄存器操作**: - 使用`IORD_ALTERA_AVALON_UART_STATUS`和`IOWR_ALTERA_AVALON_UART_STATUS`进行状态寄存器的读写。 - 使用`IOWR_ALTERA_AVALON_UART_CONTROL`写入控制寄存器。 - 使用`IOWR_ALTERA_AVALON_UART_TXDATA`发送数据至UART。 7. **中断注册**: - `alt_irq_register(UART_IRQ, (void*)0, HANDLE_UART_0_interrupts);`:注册UART中断处理函数。 #### 结论 此程序展示了如何在NIUS2开发板上通过Altera的Avalon UART接口实现UART数据的发送,涉及了寄存器操作、中断处理、数据发送等多个方面,是理解并掌握UART通信机制及其在嵌入式系统中应用的重要示例。通过深入分析代码逻辑与硬件交互细节,可以更好地理解和掌握UART通信技术在实际项目中的应用方法。
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "altera_avalon_uart_regs.h"
#include "altera_avalon_uart.h"
#define SIZE0 sizeof(dat0)
#define SIZE1 sizeof(dat1)
static alt_u8 dat0[] = "uart test successed ";//{'w',0x89,0x91};
static alt_u8 dat1[] = "www.52eda.com";//{'w',0x89,0x91};
static alt_u8 recv[3] = {0};
alt_u16 uart0state;
alt_u16 uart0control;
alt_u8 num;
/*
* This is a freestanding application, so we want to use alt_main
* as the entry point. However, if the debugger is run on this
* application, it will try to set a breakpoint at main, which
* the application does not contain. The below line creates an
* alias so the debugger is able to set a breakpoint at main,
* yet the application retains alt_main as it's entry point.
*/
int main (void) __attribute__ ((weak, alias ("alt_main")));
/*
* Use alt_main as entry point for this free-standing application
*/
void HANDLE_UART_0_interrupts(void * context,alt_u32 id)
- boyou6112017-12-27我犯二了,我想找的是STM32平台的,百毒推荐了这个,没看就下载了,亏死了。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助