S32K142的按键中断

在这里插入图片描述
在这里插入图片描述按照图片中配置,并生成代码。

接下来写代码


void SW2_IRQHandler(void)
{
	if(PINS_DRV_GetPortIntFlag(PORTC) & (1 << 12))
	{
	//在这里添加按键中断执行代码
	}
	PINS_DRV_ClearPortIntFlagCmd(PORTC);
}

int main(void)
{
	/*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
	#ifdef PEX_RTOS_INIT
	PEX_RTOS_INIT();                   /* Initialization of the selected RTOS. Macro is defined by the RTOS component. */
	#endif
	/*** End of Processor Expert internal initialization.                    ***/

	/* Write your code here */
	CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,
					   g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
	CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);
	PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);
	INT_SYS_InstallHandler(PORTC_IRQn, SW2_IRQHandler, (isr_t *)NULL);
	INT_SYS_EnableIRQ(PORTC_IRQn);

	while(1);

	/*** Don't write any code pass this line, or it will be deleted during code generation. ***/
  /*** RTOS startup code. Macro PEX_RTOS_START is defined by the RTOS component. DON'T MODIFY THIS CODE!!! ***/
  #ifdef PEX_RTOS_START
    PEX_RTOS_START();                  /* Startup of the selected RTOS. Macro is defined by the RTOS component. */
  #endif
  /*** End of RTOS startup code.  ***/
  /*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
  for(;;) {
    if(exit_code != 0) {
      break;
    }
  }
  return exit_code;
  /*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
S32K142是一款基于ARM Cortex-M4内核的微控制器,具有多个串口模块,其中包括UART、LIN和FlexCAN等。 在S32K142中,可以通过配置相应的寄存器来使能串口中断,具体步骤如下: 1. 配置串口模块的相关寄存器,包括波特率、数据位、校验位、停止位等参数。 2. 使能串口中断,并设置中断优先级。 3. 在中断服务函数中处理接收或发送数据。 以下是一个简单的示例代码,用于配置UART0并使能接收中断: ```c #include "S32K142.h" void uart0_init(void) { // 配置UART0的时钟和引脚 PCC->PCCn[PCC_PORTD_INDEX] |= PCC_PCCn_CGC_MASK; // 使能PORTD时钟 PCC->PCCn[PCC_UART0_INDEX] |= PCC_PCCn_CGC_MASK; // 使能UART0时钟 PORTD->PCR[2] = PORT_PCR_MUX(3); // UART0_RXD PORTD->PCR[3] = PORT_PCR_MUX(3); // UART0_TXD // 配置UART0的控制寄存器 UART0->BDH = 0; UART0->BDL = 26; // 波特率为9600 UART0->C1 = 0; UART0->C2 = UART_C2_RE_MASK | UART_C2_RIE_MASK; // 使能接收和接收中断 UART0->S1 = 0; UART0->S2 = 0; UART0->C3 = 0; } void UART0_RX_TX_IRQHandler(void) { if (UART0->S1 & UART_S1_RDRF_MASK) // 接收中断 { uint8_t data = UART0->D; // 处理接收到的数据 } } int main(void) { uart0_init(); NVIC_EnableIRQ(UART0_RX_TX_IRQn); // 使能UART0接收中断 while (1) { // 主循环 } return 0; } ``` 在中断服务函数中,可以通过判断UART_S1寄存器的RDRF位来判断是否发生了接收中断,如果是,则从UART0->D寄存器中读取接收到的数据。需要注意的是,在处理完中断后,需要清除UART_S1寄存器的RDRF位,否则中断会一直触发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值