• CMT2380F32模块开发7-reset例程


    本芯片具有 7 个复位信号来源,每个复位信号都可以让 CPU 重新运行,绝大多数寄存器会被复位到复位值,程序计数器 PC 会被复位指向 00000000。

    数字区域上电掉电复位 POR
    外部 Reset PAD,低电平为复位信号
    WDT 复位
    PCA 复位
    LVD 低电压复位
    Cortex-M0+ SYSRESETREQ 软件复位
    Cortex-M0+ LOCKUP 硬件复位

    每个复位源由相应的复位标志进行指示。复位标志均由硬件置位,需要用户软件清零。

    本样例主要展示Reset模块的使用方法,有一种方式是将复位标志寄存器通过P34电平输出。也可以通过串口查看输出,串口会输出寄存器值。
    这个开发板目前可以试验两个复位源,一个是通过KEY2实现的引脚复位,也可以通过reset按键实现的硬件掉电复位。需要注意的是测试硬件掉电复位时需要不连接串口的RXD引脚,因为RXD引脚会串入电流,导致无法完全掉电。

    1. // 7 6 5 4 3 2 1 0
    2. // RSTB sysreq lockup PCA WDT LVD Por15 Por5v
    3. Reset_GetCause(&stcVal); //获取复位源标志位类型
    4. DDL_ZERO_STRUCT(stcUartIrqCb);
    5. DDL_ZERO_STRUCT(stcMulti);
    6. DDL_ZERO_STRUCT(stcBaud);
    7. DDL_ZERO_STRUCT(stcBtConfig);
    8. //通道端口配置
    9. Gpio_SetFunc_UART1TX_P35();
    10. Gpio_SetFunc_UART1RX_P36();
    11. //外设时钟使能
    12. Clk_SetPeripheralGate(ClkPeripheralBt, TRUE); //模式0/2可以不使能
    13. Clk_SetPeripheralGate(ClkPeripheralUart1, TRUE);
    14. stcUartIrqCb.pfnRxIrqCb = NULL;
    15. stcUartIrqCb.pfnTxIrqCb = NULL;
    16. stcUartIrqCb.pfnRxErrIrqCb = NULL;
    17. stcConfig.pstcIrqCb = &stcUartIrqCb;
    18. stcConfig.bTouchNvic = FALSE;
    19. stcConfig.enRunMode = UartMode1;
    20. stcMulti.enMulti_mode = UartNormal;
    21. stcConfig.pstcMultiMode = &stcMulti;
    22. stcBaud.bDbaud = 0u; //双倍波特率功能
    23. stcBaud.u32Baud = 9600u; //更新波特率位置
    24. stcBaud.u8Mode = UartMode1; //计算波特率需要模式参数
    25. pclk = Clk_GetPClkFreq();
    26. timer = Uart_SetBaudRate(UARTCH1, pclk, &stcBaud);
    27. stcBtConfig.enMD = BtMode2;
    28. stcBtConfig.enCT = BtTimer;
    29. Bt_Init(TIM1, &stcBtConfig); //调用basetimer1设置函数产生波特率
    30. Bt_ARRSet(TIM1, timer);
    31. Bt_Cnt16Set(TIM1, timer);
    32. Bt_Run(TIM1);
    33. Uart_Init(UARTCH1, &stcConfig);
    34. Uart_EnableIrq(UARTCH1, UartRxIrq);
    35. Uart_ClrStatus(UARTCH1, UartRxFull);
    36. Uart_EnableFunc(UARTCH1, UartRx);
    37. Gpio_InitIO(TEST_PORT, TEST_PIN, GpioDirOut); //
    38. M0P_GPIO->P3OUT_f.P34 = 0; // P34输出Low-level
    39. u8val = *((uint8_t*)&stcVal);
    40. for (i = 0; i < 8; i++) {
    41. if ((1 << i) & u8val) //遍历复位源标志位
    42. {
    43. RepeatPin(i + 1); //当复位源标志位为1时调用IO输出函数
    44. }
    45. }
    46. Reset_Clear(u8val_temp); //清除复位源标志位
    47. Uart_SendData(UARTCH1, u8val);

    代码主要就是使能串口和GPIO,然后通过Reset_GetCause(&stcVal); 获取复位源标志位类型,最后通过串口打印出来。

  • 相关阅读:
    python-(6-3-1)爬虫---requests入门
    无人机(UAV)隐蔽通信(covert communication)的联合功率分配和轨迹设计
    Verilog:【6】PWM调制器(pwm_modulator.sv)
    cocosCreator2.4.x 打包 ios ,xcode问题记录
    十天学完基础数据结构-第六天(树(Tree))
    【OpenCV实现图像:用OpenCV图像处理技巧之巧用直方图】
    想知道图片转表格用什么软件?不妨试试这些软件
    Jmeter监控插件:监控服务器性能
    Extract Mass Data Via Bloomberg API
    内存以及垃圾回收
  • 原文地址:https://blog.csdn.net/andylauren/article/details/126155282