#include "main.h" instance_task_LOOK_SPI_PDMA_V111018_t task_LOOK_SPI_PDMA_V111018(0); // 任务实例 // 任务类 task_LOOK_SPI_PDMA_V111018_t 的例程 void task_LOOK_SPI_PDMA_V111018_t::routine() { // TODO: 在此编写例程的内容 using namespace sfr::gpio; uart0.puts("\n"); uart0.puts("/*==========================\n"); uart0.puts("======菜农250助学计划=======\n"); uart0.puts("========NUC120助学板========\n"); uart0.puts("===Lee老师旧版的UART程序====\n"); uart0.puts("=====LOOK_V20111018学习=====\n"); uart0.puts("DATE:"__DATE__"-TIME:"__TIME__"\n\r"); uart0.puts("===========第一帖==========\n"); uart0.puts("=====LED1闪烁及UART小练====\n"); uart0.puts("\n"); while (true) { // TODO: 在此编写例程的内容 GPIOA.DOUT().DOUT2(0); //GPIOA.2清零 即点亮LED1 uart0.puts(">>LED1 ON!<<\n"); delay(LOOK_TICKS_PER_SEC/2); //延时1S GPIOA.DOUT().DOUT2(1); //GPIOA.2置位 即熄灭LED1 uart0.puts(">>LED1 OFF!<<\n"); delay(LOOK_TICKS_PER_SEC/2); //延时1S } } LOOK_UART.CPP复制 #include "main.h" // uart0 构造函数 __INLINE uart0_t::uart0_t() { using namespace sfr::uart; attach(UART0_IRQn); vector_t::enable(UART0_IRQn); using namespace sfr::gcr; SYS.IPRSTC2().UART0_RST = 1; //UART0 模块复位 SYS.IPRSTC2().UART0_RST = 0; //UART0 模块正常工作 UART0.FCR() .TFR(1) //TX 软件复位 .RFR(1) //RX 软件复位 .RFITL(0x00); //Rx FIFO中断 (INT_RDA) 触发级别 1位 UART0.LCR() .SPE(0) //无校验 奇偶使能位 .EPE(0) // 0----奇校验 1----偶校验 .PBE(0) .WLS(0b011) //字长度选择 8bits .NSB(0); //1位停止位 UART0.BAUD() .BRD(0x66) //外部12MHz 115200bps 对波特率分频寄存器的设置波特率分频设置即该句必须放在第一位 .DIV_X_EN(1) //使能分频X .DIV_X_ONE(1); //Divider X equal 1 UART0.IER().RDA_IEN = 1; //使能接收中断 /* DIV_X_EN DIV_X_ONE Divider X BRD 波特率公式 Disable 0 B A UART_CLK / [16 * (A+2)] Enable 0 B A UART_CLK / [(B+1) * (A+2)] , B must >= 8 Enable 1 B A UART_CLK / (A+2), A must >=3 */ } // uart0 输出 void uart0_t::puts(const char* str) { fillfifo(str); // 填充 fifo using namespace sfr::uart; UART0.IER().THRE_IEN = 1; // 允许发送中断 task = &scheduler.get_current_task(); delay(); // 阻塞任务 } void uart0_t::put_numeral(uint8_t data) { char str[2]; char *p; str[0] = ((data/16%16>9)?(data/16%16+'A'-10)data/16%16+'0')); str[1] = ((data%16>9)?(data%16+'A'-10)data%16+'0')); p = &str[0]; puts(p); } // uart0 中断服务例程 bool uart0_t::isr(int vector) { using namespace sfr::uart; if (UART0.ISR().THRE_INT) { //UART0发送中断 const char* str = buffer; if (str == 0) { // 无数据 UART0.IER().THRE_IEN = 0; // 禁止发送中断 return true; } fillfifo(str); // 填充 fifo return false; } if (UART0.ISR().RDA_INT) { //UART0接收中断 /* Get all the input characters */ while(UART0.ISR().RDA_IF) { /* Get the character from UART Buffer */ char Received_Data = UART0.DATA; switch (Received_Data) { case 'R': case 'r': //Flag_SPI.do_set_bits(0b01); break; case 'U': case 'u': //Flag_SPI.do_set_bits(0b010); break; case 'D': case 'd': // Flag_SPI.do_set_bits(0b0100); break; case 'M': case 'm': //Flag_SPI.do_set_bits(0b01000); break; default: break; } return false; } } return false; } // uart0 中断滞后服务例程 // 所有数据发送完成后,dsr() 被调用 void uart0_t::dsr(int vector, uintptr_t count) { task->do_wakeup(); // 唤醒任务 } // uart0 填充 fifo void uart0_t::fillfifo(const char* str) { using namespace sfr::uart; do { char ch; ch = *str++; if (ch == 0) { str = 0; break; } UART0.DATA = ch; } while (!UART0.FSR().TX_FULL); buffer = str; } uart0_t uart0; // 创建 uart0 对象 工程框架: 运行截图: 工程包: 编辑原因:工程包未上传成功 20111206 13:39
#include "main.h" // uart0 构造函数 __INLINE uart0_t::uart0_t() { using namespace sfr::uart; attach(UART0_IRQn); vector_t::enable(UART0_IRQn); using namespace sfr::gcr; SYS.IPRSTC2().UART0_RST = 1; //UART0 模块复位 SYS.IPRSTC2().UART0_RST = 0; //UART0 模块正常工作 UART0.FCR() .TFR(1) //TX 软件复位 .RFR(1) //RX 软件复位 .RFITL(0x00); //Rx FIFO中断 (INT_RDA) 触发级别 1位 UART0.LCR() .SPE(0) //无校验 奇偶使能位 .EPE(0) // 0----奇校验 1----偶校验 .PBE(0) .WLS(0b011) //字长度选择 8bits .NSB(0); //1位停止位 UART0.BAUD() .BRD(0x66) //外部12MHz 115200bps 对波特率分频寄存器的设置波特率分频设置即该句必须放在第一位 .DIV_X_EN(1) //使能分频X .DIV_X_ONE(1); //Divider X equal 1 UART0.IER().RDA_IEN = 1; //使能接收中断 /* DIV_X_EN DIV_X_ONE Divider X BRD 波特率公式 Disable 0 B A UART_CLK / [16 * (A+2)] Enable 0 B A UART_CLK / [(B+1) * (A+2)] , B must >= 8 Enable 1 B A UART_CLK / (A+2), A must >=3 */ } // uart0 输出 void uart0_t::puts(const char* str) { fillfifo(str); // 填充 fifo using namespace sfr::uart; UART0.IER().THRE_IEN = 1; // 允许发送中断 task = &scheduler.get_current_task(); delay(); // 阻塞任务 } void uart0_t::put_numeral(uint8_t data) { char str[2]; char *p; str[0] = ((data/16%16>9)?(data/16%16+'A'-10)data/16%16+'0')); str[1] = ((data%16>9)?(data%16+'A'-10)data%16+'0')); p = &str[0]; puts(p); } // uart0 中断服务例程 bool uart0_t::isr(int vector) { using namespace sfr::uart; if (UART0.ISR().THRE_INT) { //UART0发送中断 const char* str = buffer; if (str == 0) { // 无数据 UART0.IER().THRE_IEN = 0; // 禁止发送中断 return true; } fillfifo(str); // 填充 fifo return false; } if (UART0.ISR().RDA_INT) { //UART0接收中断 /* Get all the input characters */ while(UART0.ISR().RDA_IF) { /* Get the character from UART Buffer */ char Received_Data = UART0.DATA; switch (Received_Data) { case 'R': case 'r': //Flag_SPI.do_set_bits(0b01); break; case 'U': case 'u': //Flag_SPI.do_set_bits(0b010); break; case 'D': case 'd': // Flag_SPI.do_set_bits(0b0100); break; case 'M': case 'm': //Flag_SPI.do_set_bits(0b01000); break; default: break; } return false; } } return false; } // uart0 中断滞后服务例程 // 所有数据发送完成后,dsr() 被调用 void uart0_t::dsr(int vector, uintptr_t count) { task->do_wakeup(); // 唤醒任务 } // uart0 填充 fifo void uart0_t::fillfifo(const char* str) { using namespace sfr::uart; do { char ch; ch = *str++; if (ch == 0) { str = 0; break; } UART0.DATA = ch; } while (!UART0.FSR().TX_FULL); buffer = str; } uart0_t uart0; // 创建 uart0 对象 工程框架: 运行截图: 工程包: 编辑原因:工程包未上传成功 20111206 13:39
您需要 登录 才可以下载或查看,没有账号?注册
举报
本版积分规则 发表回复 回帖后跳转到最后一页
等级类勋章
发帖类勋章
人才类勋章
时间类勋章
121
1393
4
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号