This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI-RTOS
尊敬的先生,
我不熟悉 TI-RTOS。 我很难理解 ISR 处理和 回调函数。 我正在尝试了解 "uartecho_TivaTM4C1294NCPDT"示例。 所以、请给您一些指示灯
如何在 TI RTOS 中启用中断并创建 ISR?
2.什么是回调函数以及如何使用它们?
如果有任何有关此问题的文档、请分享。
此致、
Digvijay
您好 Digvijay、
回调函数是特定于应用的函数、在特定事件之后调用。 UART 驱动程序可以从 ISR 调用回调函数。 也就是说、从中断上下文调用回调函数。
应用程序需要指定特定驱动程序的回调函数。 例如:
UART_Handle handle; UART_Params uartParams; //使用以下参数创建 UART。 */ UART_Params_init (&uartParams); uartParams.writeMode = UART_MODE_CALLBACK; uartParams.readMode = UART_MODE_CALLBACK; uartParams.writeCallback =&writeCallback; uartParams.readCallback =&readCallback;
回调函数的重点是为应用程序提供在中断服务例程中"执行某些操作"的机会。 例如、当 UART 驱动程序接收到 UART 中断时、您可能需要:发布信标、切换 GPIO 或 LED 等
Derrick
尊敬的先生,
我正在尝试为 CAN 创建驱动程序。 我能够成功地传输数据。 在接收器操作中、我需要生成中断。 但我遇到以下错误。
FSR = 0x0000
HFSR = 0x40000000
DFSR = 0x0000000b
MMAR = 0xe000ed34
BFAR = 0xe000ed38
AFSR = 0x00000000
正在终止执行...
我启用了以下中断
hwi_construct(&(object->hwi)、hwAttrs->intNum、CANTiva_hwiIntFxn、
&(Samsunion.hwiParams),NULL);
CANIntEnable (hwAttrs->baseAddr、
CAN_INT_MASTER | //允许 CAN 控制器生成中断,必须启用。
CAN_INT_ERROR | //控制器进入“BUS OFF”状态,或者错误计数器达到限制。
CAN_INT_STATUS);
因此、请告诉我出错的地方。
此致、
Digvijay
Digvijay、
调用 CANIntEnable()时应用程序是否崩溃? 如果是、您可能需要打开 CAN 控制器的时钟。
Derrick
尊敬的先生,
调用 CANIntEnable()时,我的应用程序不会崩溃。 CAN ISR 在 发送操作时工作正常。 对于接收操作,控制在接收消息产生中断后进入 ISR。 我无法理解 ISR 中发生的情况。 控制进入以下 IF 环路并终止应用。
//如果原因是控制器状态中断,则获取状态
if (ui32Status = CAN_INT_INTID_STATUS)
{
//读取控制器状态。 这将返回状态字段
//可以指示各种错误的错误位。 错误处理
//本示例中不是为了简单起见。 请参阅
// API 文档,了解有关错误状态位的详细信息。
//读取此状态的操作将清除中断。 如果
// CAN 外设未与其它 CAN 器件连接到 CAN 总线
//存在,则会发生错误,并在中指示
//控制器状态。
ui32Status = CANStatusGet (CAN1_base、CAN_STS_CONTROL);
//设置一个标志来指示可能发生的某些错误。
G_bErrFlag = 1;
}
附加了读取和 ISR 例程。 LED 和 readbuf 用于调试。
e2e.ti.com/.../New-Text-Document.txt
此致
Digvijay
Digvijay、
是否已检查 ui32Status 是否设置了任何其他位? 如果是、您的 if;else 案例可能会发生故障。
您可以尝试按位执行运算吗?
if (ui32Status & CAN_INT_INTID_STATUS) { } 否则 if (ui32Status & 0x1) { } 否则 if (ui32Status & 0x2) { }
尊敬的先生,
问题得到解决。 在接收操作后添加了无限 while 环路、它开始工作。 无论如何、感谢您的帮助。
此致、
Digvijay
让记录表明(以某种方式)海报(错过)他的"已解决奖"-他的"开场/提问帖子"。