当前位置: 首页 > news >正文

国内做卷学习网站网站优化企业排名

国内做卷学习网站,网站优化企业排名,网站建设费 科目,成都企业建设网站前面我们知道在手册中有一个中断向量表,初步了解了中断的概念。 1.NVIC简介 NVIC是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。 在固件库中,NVIC的结构体定义可谓是…

前面我们知道在手册中有一个中断向量表,初步了解了中断的概念。

1.NVIC简介

NVIC是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。

在固件库中,NVIC的结构体定义可谓是颇有远虑,给每个寄存器都预览了很多位,恐怕为的是日后扩展功能。不过STM32F407可用不了这么多, 只是用了部分而已。

在core_cm4.h文件中typedef struct {__IO uint32_t ISER[8];       // 中断使能寄存器uint32_t RESERVED0[24];__IO uint32_t ICER[8];       // 中断清除寄存器uint32_t RSERVED1[24];__IO uint32_t ISPR[8];       // 中断使能悬起寄存器uint32_t RESERVED2[24];__IO uint32_t ICPR[8];       // 中断清除悬起寄存器uint32_t RESERVED3[24];__IO uint32_t IABR[8];       // 中断有效位寄存器uint32_t RESERVED4[56];__IO uint8_t  IP[240];       // 中断优先级寄存器(8Bit wide)uint32_t RESERVED5[644];__O  uint32_t STIR;          // 软件触发中断寄存器
}  NVIC_Type;

在配置中断的时候我们一般只用ISER、ICER和IP这三个寄存器,ISER用来使能中断,ICER用来失能中断,IP用来设置中断优先级。NVIC对中断进行分组,组0~4,同时对每一个中断设置一个抢占优先级和一个响应优先级值。(数值越小,优先级越高)

优先级分组主优先级(抢占优先级)子优先级(响应优先级)描述
NVIC_PriorityGroup_000-15主-0bit,子-4bit
NVIC PriorityGroup_10-10-7主-1bit,子-3bit
NVIC_PriorityGroup_20-30-3主-2bit,子-2bit
NVIC_PriorityGroup_30-70-1主-3bit,子-1bit
NVIC_PriorityGroup_40-150主-4bit,子-0bit
  • 高优先级的抢占优先级中断是可以打断正在进行的低抢占优先级中断的。
  • 抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。
  • 抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。
  • 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行。

一般情况下,系统代码执行过程中,只设置一次中断优先级分组,设置好之后一般不会改变。设置优先级分组可调用库函数NVIC_PriorityGroupConfig()实现,有关NVIC中断相关的库函数都在库文件misc.c和misc.h中。

在misc.c中
/**
* 配置中断优先级分组:抢占优先级和子优先级
* 形参如下:
* @arg NVIC_PriorityGroup_0: 0bit for抢占优先级
*                            4 bits for 子优先级
* @arg NVIC_PriorityGroup_1: 1 bit for抢占优先级
*                            3 bits for 子优先级
* @arg NVIC_PriorityGroup_2: 2 bit for抢占优先级
*                            2 bits for 子优先级
* @arg NVIC_PriorityGroup_3: 3 bit for抢占优先级
*                            1 bits for 子优先级
* @arg NVIC_PriorityGroup_4: 4 bit for抢占优先级
*                            0 bits for 子优先级
* @注意 如果优先级分组为0,则抢占优先级就不存在,优先级就全部由子优先级控制
*/
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
{// 设置优先级分组SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
}

2.中断编程

在配置每个中断的时候一般有3个编程要点:

  1. 使能外设某个中断,这个具体由每个外设的相关中断使能位控制。 比如串口有发送完成中断,接收完成中断,这两个中断都由串口控制寄存器的相关中断使能位控制。

  2. 初始化NVIC_InitTypeDef结构体,配置中断优先级分组, 设置抢占优先级和子优先级,使能中断请求。

typedef struct {uint8_t NVIC_IRQChannel;                    // 中断源uint8_t NVIC_IRQChannelPreemptionPriority;  // 抢占优先级uint8_t NVIC_IRQChannelSubPriority;         // 子优先级FunctionalState NVIC_IRQChannelCmd;         // 中断使能或者失能
} NVIC_InitTypeDef;

3.编写中断服务函数

在启动文件startup_stm32f40xx.s中我们预先为每个中断都写了一个中断服务函数,只是这些中断函数都是为空,为的只是初始化中断向量表。 实际的中断服务函数都需要我们重新编写,中断服务函数我们统一写在stm32f4xx_it.c这个库文件中。

关于中断服务函数的函数名必须跟启动文件里面预先设置的一样,如果写错,系统就在中断向量表中找不到中断服务函数的入口, 直接跳转到启动文件里面预先写好的空函数,并且在里面无限循环,实现不了中断。

    NVIC_InitTypeDef NVIC_InitStructure;/* 配置USART为中断源 */NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;/* 抢断优先级为1 */NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;/* 子优先级为1 */NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;/* 使能中断 */NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/* 初始化配置NVIC */NVIC_Init(&NVIC_InitStructure);

3.总结

  • NVIC_PriorityGroupConfig是整个程序中只需要设置一次 ,适合放在main()函数中。
  • NVIC_Init(&NVIC_InitStructure) 配置结构体赋值的将要设置的中断向量和其优先级,可以放在模块中进行。
http://www.hengruixuexiao.com/news/22589.html

相关文章:

  • java php做网站郑州做网站推广哪家好
  • 网站建设微商城多少钱淄博头条新闻今天
  • 绍兴网站建设小红书怎么推广
  • wordpress gettheauthormeta排名优化价格
  • 程序员网上接单seo推广人员
  • 2017网站开发薪资自己可以做网站吗
  • e网站的图标怎么做seo好学吗
  • 电商网站的建设与安全网站优化推广招聘
  • 手机记事本做网站搜索引擎优化seo应用
  • 厦门做网站个人今日头条关键词工具
  • 网站建设就业前景2017国外免费建站网站搭建
  • 西安哪些做网站的公司好成人零基础学电脑培训班
  • 网站怎么做h5支付宝支付微信运营
  • 北京上海网站建设公司哪家好网站建设哪家好
  • 关注济南网站建设搜索引擎优化论文
  • 网站联系方式连接怎么做灰色词排名代做
  • 大连工业大学怎么样广西seo搜索引擎优化
  • 临沂网站建设公司全国外贸建站网站推广
  • 网站建设存在风险天津seo优化
  • 深圳制作企业网站佐力药业股票
  • 网站建设的可行性分析百度推广外包
  • 深圳网站建设那家好营销策划书模板
  • 网站切图今日热搜前十名
  • 做哪一类的网站可以短时间变现电商代运营公司排名
  • 政府网站集约化建设规划安卓手机性能优化软件
  • 泰安搜索引擎优化招聘seo域名如何优化
  • 优门设 网站免费产品推广软件
  • 天津建设教育培训中心网站郑州网络推广
  • 一步步教会你怎么做网站大批量刷关键词排名软件
  • 东莞市建设规划局网站首页郑州网络推广大包