LK32T102学习6-中断

首先要了解什么叫中断

当LK32T发生中断时,LK32T会自动到一个特定区域读取中断服务程序(ISR)的地址(这个特定区域也叫中断向量表),然后自动执行ISR。这与传统的中断处理方式不同,传统的方式一般是CPU从中断向量处开始执行代码,而执行的代码往往是一条跳转指令,这条指令跳转到真正的ISR处,现在来看,这种方式效率是较低的。

对于每个特定的芯片来说,其能够管理的中断及中断对应的设备设是固定的,为了灵活性一般设备通过向量中断控制器(VIC)与CPU联系,因为VIC非常重要,cortex-Mx已经将VIC集成到系统中了,LK32T只要将设备连到VIC就可以使用中断了。所以中断可以分为3个层次:设备级、中断向量控制器级、CPU级,在每一级都可以阻止中断信号向下一级的传递。cortex M0中的VIC也称NVIC,即被嵌套(nested)的VIC。

所谓分级就是在设备处决定是否发出中断信号,如果可以,该信号将传送到中断向量控制器(VIC),VIC也可以控制是否将该中断信号继续传送到CPU,而CPU也可以决定即使收到该中断信号,系统是否处理该中断信号。

1.CPU级中断

置位后,CPU的PRIMASK寄存器除了不可屏蔽中断(NMI)和硬件错误异常外的中断都可以屏蔽掉。

__disable_irq()

__enable_irq()

2.NVIC的寄存器

中断使能和清除使能SETENANVIC_EnableIRQ(IRQn)

IRQn=0~31

如果一个中断发生了,却无法立即处理(比如CPU正在处理更高优先级的中断),这个中断请求将会被挂起,挂起状态被保存在一个寄存器中,如果CPU的当前优先级还没有降低到可以处理挂起的请求,并且没有手动清除挂起的状态,该状态将会一直保存合法。

中断挂起状态寄存器允许使用软件来触发中断。

CLRENANVIC_DisableIRQ(IRQn)
中断挂起和清除挂起SETPENDNVIC_SetPendingIRQ(IRQn)
CLRPENDNVIC_ClearPendingIRQ(IRQn)
中断优先级IPR0~IPR31NVIC_SetPriority(IRQn,priority)

IRQn的值在sc32F5832.h中定义。

3.设备级中断:

因为资料不足,下面的很多内容是根据模板及用户手册推测的,很多要进行试验验证。

3.1GPIO中断

也可以说是外部中断,根据用户手册:

  • 每个单独端口引脚均可用作外部中断输入。
  • 边沿(上升/下降/双边)和电平可配置
  • 单独的中断使能位
  • 中断标志可查询
涉及中断的有:

INTMASK相当于中断开关;INTTYPE、INTBV、INTPOL设置中断信号的类型:高电平、低电平、上升沿、下降沿、单边沿、双边沿等;RIS和MIS是用于查询管脚上是否有中断信号,并可以清除中断。

系统并没有给每一个管脚都留了一个中断号,而是留了3个。也就是说约48个管脚共用,所以可能还要进行查询的。模板中分了3组,但模板代码有瑕疵:PA_IRQn 、PB_IRQn 、PC_IRQn 三个中断的中断号在sc32F5832.h中定义为16,17,18,而在startup_sc32F5832.s的16、17、18处的三个中断确是GPIO0_IRQHandler、GPIO1_IRQHandler、GPIO2_IRQHandler资料的统一还是不够。从中也可以看出外部中断上按照端口分组的。

3.2ADC中断

ADC中断 可在任意转换之后配置中断
涉及的寄存器较多,不再列举,在用户手册ADC部分
因为存在 16 个独立的转换(SOC),所以有 16 个转换完成(EOC)脉冲。通过配置(ADCCTL1[INTPULSEPOS])可以 选择 EOC 脉冲出现在转换开始时,或是出现在转换结束时。
ADC 模块的中断可以被配置成以任一 EOC 信号作为中断源,可以在 ( INTSELxNy [INTx(y)SEL])中进行设置。 ( ADCINTFLG [ADCINTx])(x=1~9) 中断标志位指示 是否发生了相应 的中 断事件,该标志 位通 过向 ( ADCINTFLGCLR [ADCINTx]) 1 清除。在连续转换模式 (INTSELxNy[INTxCONT]=1)下,不论中断标志是否置位只要 一个 EOC 事件发生都会继续产生中断脉冲;若不在连续模式下,中断标志位被清零前不能继续产生中断脉冲,否则就 会产生中断溢出。中断溢出标志位 (ADCINTOVF[ADCINTx]) 指示是否发生了中断溢出事件,该标志位通过向 (ADCINTOVFCL[ADCINTx]) 1 清除。
什么信号引起中断(16个选一个)?何时发生中断(开始转换时,还是结束转换时)?
ADCINTFLG
中断标志寄存器
是否有ADC中断发生了?
ADCINTFLGCLR
中断标志清零寄存器
ADCINTOVF
中断溢出寄存器
ADC转换是否发生了溢出?
ADCINTOVFCL
中断溢出清零寄存器
INTSELxNy
中断 x y 选择寄存器
1&2,3&4,5&6,7&8,9&10(是否中断使能?哪一个信号引起中断)
ADCINTSOCSELx
中断 SOC 选择寄存器x
什么信号启动转换(SOC)
ADC_CMP_INTR
比较器中断寄存器

ADC0_IRQn,ADC1_IRQn、ADC2_IRQn、ADC_IRQn三个中断号在sc32F5832.h中定义为19,20,21,而在其用户手册中明确说只有一个12位的ADC,是不是其他的类型芯片有4个ADC?从其示例代码中可以看出ADC实际使用的是编号为21的中断。

下面是转换ADCINB5输入的模拟量,软件启动转换的模板中的例子的有关中断的主体部分,其他类似。

void ADC_Init(){
  ADC_RESET;	// ADC复位
  ADC_ENABLE;	// ADC使能
  //跟ADC转换有关的参数设置,具体情况具体对待,一般不用改(略)
   ....

  //跟中断有关的设置,转换ADCINB5输入的模拟量,软件启动转换
  ACCESS_ENABLE;
  ADC -> INTSEL5N6_b.INT5E = 1;// ADCINT5使能
  ADC -> INTSEL5N6_b.INT5CONT = 0; // ADCINT5 非连续模式使能
  ACCESS_ENABLE;
  ADC -> INTSEL5N6_b.INT5SEL = 5;  // 5通道转换结束信号作为中断信号
  ACCESS_ENABLE;ADC->ADCSOC5CTL_b.CHSEL = ChSel[5];//Chesl[5]=13,即ADCINB5信号作为5通道的输入
  ACCESS_ENABLE;ADC->ADCSOC5CTL_b.TRIGSEL = TrigSel[5];//TrigSel[5]=0,即软件触发ADC启动转(SOC)
}
...
int main( void ){

  Device_Init();
  ...
  ADC_Init();
  IRQ_Enable();//开中断--->NVIC_EnableIRQ(ADC_IRQn);	
  while(1){
   ...
   ADC -> ADCSOCFRC1 |= (1 << 5);//ADC - SOC5强制转换
   ...
  }

}
uint16_t ADC_SOC5_Result = 0;
void ADC_IRQHandler()
{
	if((ADC -> ADCINTFLG_b.ADCINT5))
	{
				
		ACCESS_ENABLE;
		ADC_SOC5_Result = ADC -> ADCRESULT5_b.RESULT;//读出转换结果
		...
		...
		ACCESS_ENABLE;
		ADC -> ADCINTFLGCLR_b.ADCINT5 = 1;//清除中断标志,以防再次引起中断
		NVIC_ClearPendingIRQ(ADC_IRQn);	//中断已处理,给低优先级的中断一个机会,防止进程竞争
	}
	
}

4.中断与事件

事件和中断是一对令人感到非常困惑的概念,中断已经有了,为什么还提出事件这个概念?有中断请求了,为什么还有事件请求?STM32_外部中断线/事件线理解一文提出了解释:可以这样简单的认为,事件机制提供了一个完全有由硬件自动完成的触发到产生结果的通道,不要软件的参与,降低了CPU的负荷,节省了中断资源,提高了响应速度(硬件总快于软件),是利用硬件来提升CPU芯片处理事件能力的一个有效方法。

举例说明:现在要完成一项任务,当按键按下时启动ADC,并将ADC转换的结果显示出来。

4.1采用中断机制

按键按下,触发外部中断,系统自动调用外部中断服务程序,外部中断服务程序启动ADC,等待转换结果,当装换结果出来后显示结果。

4.2采用事件机制

ADC启动前将ADC启动信号与外部按键事件关联,按键按下时,系统中断启动ADC,待转换结束,触发ADC中断,系统自动调用ADC中断服务程序,读取结果并显示。

采用事件机制以后,处理的流程变复杂了,但是响应的速度提高了。

 /****************************************/

很遗憾,有很多的东西我没有办法一一给大家回复,所以我建立了一个群,供大家一起交流!

 

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 朗讯科技LK32T102是一款器件支持包,针对该器件进行了详细的支持和配套。这个器件支持包提供了一系列的组件和功能,旨在帮助用户更好地使用和集成LK32T102器件。 首先,该器件支持包包括了器件的详细文档和用户手册。这些文档包含了器件的规格参数、功能介绍、接口定义等重要信息,用户可以通过阅读这些文档来更好地了解该器件的特性和使用方法。 其次,该器件支持包提供了一套完整的开发工具和软件包。开发工具包中包含了开发板和调试器等硬件设备,用户可以借助这些设备进行器件的开发和调试。软件包中则包括了开发器件所需的驱动程序、示例代码等软件资源,用户可以通过这些资源进行开发和测试工作。 此外,该器件支持包还提供了技术支持服务。用户可以通过邮件、电话等方式联系到朗讯科技的技术支持团队,获得相应的帮助和解答。技术支持团队会根据用户的需求提供相关的技术指导,包括器件的选型、接口设计、故障排查等方面。 总之,朗讯科技LK32T102器件支持包是一个综合性的支持和配套系统,为用户提供了一系列的组件、文档和服务,旨在帮助用户更好地使用和集成该器件。用户可以通过这个支持包来开发和应用LK32T102器件,提高工作效率和产品质量。 ### 回答2: 朗讯科技lk32t102器件支持包是朗讯科技公司为lk32t102芯片开发的一套软件和文档支持工具。lk32t102芯片是一款高性能的微控制器芯片,它的特点是运算速度快、功耗低、功能丰富。 朗讯科技lk32t102器件支持包主要包括以下几个方面的内容: 1.软件开发工具:这是一个针对lk32t102芯片的软件集成开发环境,内含编辑器、编译器、调试器等工具,可用于开发lk32t102芯片的应用程序。 2.驱动程序:这是一系列与lk32t102芯片兼容的设备驱动程序,包括显示驱动、声音驱动、输入输出设备驱动等,可以方便地与外部设备进行通信。 3.示例代码:这是一些lk32t102芯片的应用示例代码,包括各种功能的实现代码,可以帮助开发人员更快速地上手进行开发。 4.软件文档:这是一份详细的lk32t102芯片的软件使用说明书,包括软件的安装、使用方法、调试技巧等,可以帮助开发人员更好地使用lk32t102芯片及其相关软件。 通过使用朗讯科技lk32t102器件支持包,开发人员可以更加方便地进行lk32t102芯片的软件开发工作,加快开发速度,提高开发效率。同时,朗讯科技公司还提供技术支持服务,可以帮助开发人员解决在开发过程中遇到的问题,确保开发工作的顺利进行。 ### 回答3: 朗讯科技lk32t102器件支持包是为了满足用户在使用lk32t102器件时的技术支持和服务需求而推出的一项产品。支持包的主要目的是帮助用户解决在使用器件过程中遇到的技术问题,提供相关的资料和指导,确保用户能够顺利使用和应用lk32t102器件。 该支持包包括以下内容: 1. 技术文档:提供详细的技术规格和产品说明书,帮助用户了解lk32t102器件的功能、特性和使用方法。文档中还包含一些典型应用的设计指南和示例电路,供用户参考和借鉴。 2. 在线技术支持:用户可以通过电话、邮件或在线交流平台与朗讯科技的技术人员进行沟通,咨询和解决lk32t102器件的相关问题。技术支持团队将提供专业的技术指导和建议,帮助用户快速解决问题。 3. 软件开发工具:为了方便用户在lk32t102器件上进行软件开发,支持包提供了相应的软件开发工具和驱动程序。用户可以使用这些工具进行代码编写、编译、下载和调试,加快产品开发的速度和效率。 4. 维修和保修服务:如果在使用lk32t102器件时发生故障或其他问题,用户可以向朗讯科技申请维修或替换。支持包提供一定的保修期限和全面的售后服务,确保用户的合法权益得到保护。 朗讯科技lk32t102器件支持包是为了提供全方位的技术支持和服务,帮助用户更好地使用和应用该器件,并确保产品开发的顺利进行。无论是在技术文档、在线技术支持、软件开发工具还是售后服务方面,支持包都将不断升级和完善,以满足用户的不同需求和期望。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值