Other Parts Discussed in Thread: AM5706, SYSBIOS
部件号: AM5706
主题中讨论的其他器件: SYSBIOS
您好、
我尝试使用 TI AM5706 处理器中的 MPU WDT。 对于 MPU WDT、我已禁用复位并且只启用中断、以便当 WDT 计时器结束时、不会启动处理器复位、而只会生成中断。 并且运行正常。 但当我将处理程序附加到这个 WDT 中断时、不会触发。
此外、根据 TRM、我发现要使用的中断号为 139、但它也映射到 GIC 中的 ID171。 现在我不清楚要使用什么。
此外、我在 TRM 中找到了一个名为 CTRL_CORE_MPU_IRQ_138_139 的寄存器 0x4A002B4C、我应该如何处理它?
以下是我正在做的事情:
Void MPU_Watch Dog_Timer ()
{
Hwi_Params hwiParams;
Error_Block EB;
UART_printf(“MPU WDT\n“);
uint32_t TimeOutValue = 1000000;
uint32_t 预分频器= 0xFFFFFFFF;
uint32_t Count = 0、temp;
uint32_t Read_Value;
Char Uart_Recv_Buffer [1000];
UART_printf(“按 Enter 键触发 WDT\n“);
UART_Gets (Uart_Recv_Buffer、32);
/*将 ISR 映射到 WDT 中断*/
HW_WR_REG32 (0x4828102、0x800);
HW_WR_REG32 (0x4A002B4C、(139<<16));
Read_Value = HW_RD_REG32 (WDT_RESET_STATUS_REGISTER_0);
UART_printf(“状态寄存器= 0x%x\n“、Read_Value);
ERROR_INIT (&EB);
Hwi_Params_初始化 (&hwiParams);
hwiParams.arg = 0;
hwiParams.priority = 1;
hwiParams.enableInt = true;
hwiParams.EventID = 1;
hwiParams.maskSetting = Hwi_Masking option_self;
hwiParams.type = ti_sysbios_family_ARM_GIC_IRq. Hwi_Type_;
Hwi_Handle h = Hwi_create (139、wdtISR、&hwiParams、&EB);
hwi_enableirq();
if (h == NULL)
{
UART_printf(“\n Hwi_create 失败!!\n“);
}
暴露
{
UART_printf(“\n Hwi_create successfull!!\n“);
}
/*设置比例尺值*/
HW_WR_REG32 (WDT_PRESCALER_REGISTER_0、PRESCAR);
/*加载初始计数器 */
HW_WR_REG32 (WDT_LOAD_REGISTER_0、TimeOutValue);
Read_Value = HW_RD_REG32 (WDT_COUNT_REGISTER_0);
UART_printf(“初始计数=%d\n“、Read_Value);
/*清除状态寄存器*/
HW_WR_REG32 (WDT_RESET_STATUS_REGISTER_0、0x1);
/*在 WDT 控制中禁用复位并启用中断*/
HW_WR_REG32 (WDT_CONTROL_REGISTER_0、0x2);
/*启用 WDT */
TEMP = HW_RD_REG32 (WDT_CONTROL_REGISTER_0);
HW_WR_REG32 (WDT_CONTROL_REGISTER_0、(TEMP | 0x1)); //禁用 MPUSS 复位 — 0x103、启用 MPUSS 复位 — 0x10B
/*轮询 STATUS 寄存器的第 0 位以查看是否发生超时*/
while(!(HW_RD_REG32 (WDT_RESET_STATUS_REGISTER_0)& 0x1))
{
Read_Value = HW_RD_REG32 (WDT_COUNT_REGISTER_0);
UART_printf(“\n 当前计数=%d“、Read_Value);
}
Read_Value = HW_RD_REG32 (WDT_RESET_STATUS_REGISTER_0);
UART_printf(“状态寄存器= 0x%x\n“、Read_Value);
while (1)
{
if(!(计数% 10000))
{
UART_printf(“%d “、Count++);
fflush(空);
}
count++;
}
}