CSL 无法 读写XBSR的SP2位
这两天遇到一个奇怪的问题
在CSL的API中,明明提到XBSR又SP2这个寄存器,查看5502 datasheet也可以找到这一证据。
但是使用
CHIP_FSET(XBSR,SP2,0);
语句进行XBSR的SP2位设置的时候,在编译时出现如下错误提示:
"uart_test.c" , line 37: error: identifier "_CHIP_XBSR_SP2_CLR" is undefined "uart_test.c" , line 37: warning: function declared implicitly |
去掉仿真器,尝试使用软件仿真对以上代码进行编译时,依然提示该错误。
5502最小版的技术客服认为是CCS软件的问题,要求下载新的补丁文件。
------------------------
在网上偶然看到一段代码里面用的域名不是SP2而是SP2MODE,就想着试一试。没想到竟然成功了……坑爹的API嗷……
贴一段代码,测试成功:
#include <stdio.h>
#include <csl.h>
#include <csl_uart.h>
#include <csl_irq.h>
#define LEN 4;
UART_Setup Params = {
UART_CLK_INPUT_20,
UART_BAUD_9600,
UART_WORD8,
UART_STOP1,
UART_DISABLE_PARITY,
UART_FIFO_DISABLE,
UART_NO_LOOPBACK
};
void sleep(int time){
int i = 0;
for(;i < time; i++){
}
}
void main(){
Uint16 regVal;
CSL_init();//调用任何CSL模块API之前都要使用的语句
CHIP_FSET(XBSR,SP2MODE,1);
regVal = CHIP_RGET(XBSR);
printf("XBSR value: %x \n",regVal);
printf("hello world\n");
}
#include <csl.h>
#include <csl_uart.h>
#include <csl_irq.h>
#define LEN 4;
UART_Setup Params = {
UART_CLK_INPUT_20,
UART_BAUD_9600,
UART_WORD8,
UART_STOP1,
UART_DISABLE_PARITY,
UART_FIFO_DISABLE,
UART_NO_LOOPBACK
};
void sleep(int time){
int i = 0;
for(;i < time; i++){
}
}
void main(){
Uint16 regVal;
CSL_init();//调用任何CSL模块API之前都要使用的语句
CHIP_FSET(XBSR,SP2MODE,1);
regVal = CHIP_RGET(XBSR);
printf("XBSR value: %x \n",regVal);
printf("hello world\n");
}
将SP2MODE置1时,XBSR寄存器的值regVal输出为5;
将SP2MODE置0时,XBSR寄存器的值regVal输出为1;
---------------------
问题解决
是因为API中使用的域名与程序使用的域名不相符所导致。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构