RISC-V 嵌入式系统设计 课件 第七讲 基础外设_第1页
RISC-V 嵌入式系统设计 课件 第七讲 基础外设_第2页
RISC-V 嵌入式系统设计 课件 第七讲 基础外设_第3页
RISC-V 嵌入式系统设计 课件 第七讲 基础外设_第4页
RISC-V 嵌入式系统设计 课件 第七讲 基础外设_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七讲

基础外设目录CH32V307的架构与地址映射外设控制器和驱动器一般原理外设驱动程序的一般构成CH32V307的GPIOCH32V307的中断(PFIC)CH32V307的定时器(TIM)CH32V307的ADCCH32V307MCU的架构框图CH32V307MCU的地址映射一个典型的外围设备(外设,Peripherals)FIFO&StatusRegsDriverHardwareCPUBUS/DMAControlTimingControlvoltage/CurrentData&StatusControlLogicConfigRegsBUSInterfaceInterruptsignalIntegratingintoonemoduleControllerCPUInterruptControllerIRQOnlytheControllerisVisiblefortheprogrammer驱动程序(Driver)的一般结构APIOSKernelFileSystemAPPnFileInterfaceISRFIFOManageHardWareManageISRFIFOManageHardWareManageDevice1Devicen……FileInterfaceAPP1App2……DeviceDriversAlldevicesareabstractedasfilesinUNIXandLinux.Filesarestreamswhicharestructuredbyte/bitsstream.Hardwareinitialization,configurationandstatusmanagement.TXandRXinterruptsErrorinterruptsNotifyOSfortaskswitch软件控制外设的集中方式:软件轮询中断DMA(直接存储器访问)CH32V307

MCU底层软件包的目录结构├─Core 内核相关驱动函数├─Debug 初始化调试串口延时等函数├─Ld 链接文件(脚本)├─Peripheral 外设驱动│├─inc 外设驱动头文件│└─src 外设驱动源码└─Startup 启动代码的汇编文件相应的外设的驱动文件的文件名命名形式是ch32v30x_PPP其中PPP就是外设的名称,例如GPIO的相关驱动文件名为ch32v30x_gpio,PPP_StructInit的函数,其功能为通过设置PPP_InitTypeDef结构中的各种参数来定义外设的功能。PPP_Init的函数,其功能是根据PPP_InitTypeDef中指定的参数,初始化外设PPP,也就是将这些参数真正写入到外设的相应配置寄存器中。PPP_DeInit的函数,其功能为复位外设PPP的所有寄存器至缺省值。PPP_Cmd的函数,其功能为使能或者失能外设PPP。PPP_ITConfig的函数,其功能为使能或者失能来自外设PPP某中断源。PPP_DMAConfig的函数,其功能为使能或者失能外设PPP的DMA接口。PPP_GetFlagStatus的函数,其功能为检查外设PPP某标志位被设置与否。PPP_ClearFlag的函数,其功能为清除外设PPP标志位GPIOGPIO的作用GPIO口可以配置成多种输入或输出模式,内置可关闭的上拉或下拉电阻,可以配置成推挽或开漏功能。GPIO口还可以复用成其他功能。输出:软件控制通过软件编程,可以输出0/1信号输出信号可形成变化较慢、时间精度较低的波形输入:采样外部信号采样速度取决于软件读取寄存器速度外部中断:外部输入信号可作为中断源通过GPIO的输入通道连接到中断控制器GPIO可与专用功能管脚复用可配置为:GPIO管脚、专用数字管脚、专用模拟管脚GPIO主要特征GPIO端口的每个引脚都可以配置成以下的多种模式之一:浮空输入(GPIO_Mode_IN_FLOATING),引脚电平是真实的外部连接器件电压,电平有不确定性;上拉输入(GPIO_Mode_IPU):默认通过电阻上拉到VCC,不接外部器件时可以读出高电平;下拉输入(GPIO_Mode_IPD):默认通过电阻下拉到GND,不接外部器件时可以读出低电平;模拟输入(GPIO_Mode_AIN):将外部信号直接传输到模拟功能模块上。

开漏输出(GPIO_Mode_Out_OD):只能输出低电平,高电平由电阻上拉决定推挽输出(GPIO_Mode_Out_PP):可以输出强高和强低复用功能的输入和输出:许多GPIO引脚拥有复用功能,很多其他的外设把自己的输出和输入通道映射到这些引脚上进行输入输出。GPIO管脚的复用每个管脚的功能:1、复位后的缺省功能2、默认复用功能3、重映射功能为什么要复用?因为封装引出的管脚少GPIO的用途控制外部电路的使能软件可控的开关给外部电路一串波形如:模拟I2C、PWM外部中断提供与外部电路通信机制需要并行控制的信号如:数码LED灯并行显示GPIO基本结构如图所示IO口结构,每个引脚在芯片内部都有两只保护二极管,IO口内部可分为输入和输出驱动模块。其中输入驱动有弱上下拉电阻可选,可连接到AD等模拟输入的外设;如果输入到数字外设,就需要经过一个TTL施密特触发器,再连接到GPIO输入寄存器或其他复用外设。而输出驱动有一对MOS管,可通过配置上下的MOS管是否使能来将IO口配置成开漏或推挽输出;输出驱动内部也可以配置成由GPIO控制输出还是由复用的其他外设控制输出。图1GPIO模块基本结构框图输入配置当IO口配置成输入模式时,输出驱动断开,输入上下拉可选,不连接复用功能和模拟输入。在每个IO口上的数据在每个APB时钟被采样到输入数据寄存器,读取输入数据寄存器对应位即获取了对应引脚的电平状态。图2GPIO模块输入配置结构框图输出配置当IO口配置成输出模式时,输出驱动器中的一对MOS可根据需要被配置成推挽或开漏模式,不使用复用功能。输入驱动的上下拉电阻被禁用,TTL施密特触发器被激活,出现在IO引脚上的电平将会在每个APB时钟被采样到输入数据寄存器,所以读取输入数据寄存器将会得到IO状态,在推挽输出模式时,对输出数据寄存器的访问就会得到最后一次写入的值。图3GPIO模块输出配置结构框图复用功能配置在启用复用功能时,输出驱动器被使能,可以按需要被配置成开漏或推挽模式,施密特触发器也被打开,复用功能的输入和输出线都被连接,但是输出数据寄存器被断开,出现在IO引脚上的电平将会在每个APB时钟被采样到输入数据寄存器,在开漏模式下,读取输入数据寄存器将会得到IO口当前状态;在推挽模式下,读取输出数据寄存器将会得到最后一次写入的值。图4GPIO模块被其他外设复用时的结构框图模拟输入配置在启用模拟输入时,输出缓冲器被断开,输入驱动中施密特触发器的输入被禁止以防止产生IO口上的消耗,上下拉电阻被禁止,读取输入数据寄存器将一直为0。图5GPIO模块作为模拟输入时的配置结构框图GPIO初始化结构体与编程方法流水灯闪烁实验赤兔板上的两个LED的硬件连接流水灯闪烁实验CH32V307的中断中断CH32V307系列芯片内置快速可编程中断控制器(PFIC–ProgrammableFastInterruptController),如图图6PFIC控制器主要特征最多支持255个中断向量,当前系统管理了88个外设中断通道,每个中断请求都有独立的触发和屏蔽控制位,有专用的状态位,其他保留;可编程多级中断嵌套,最大嵌套深度8级,硬件压栈深度3级;特有快速中断进出机制,硬件自动压栈和恢复,无需指令开销;特有免表(VTF)中断响应机制,4路可编程直达中断向量地址中断优先级的概念用赤菟开发板编程时有两个优先级的概念——抢占式优先级和响应优先级,响应优先级可称为“亚优先级”或“副优先级”,每个中断源都需要被指定这两种优先级。具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。PFIC寄存器描述

PFIC相关寄存器列表typedef

struct{//PFIC控制器的寄存器映射结构体__Iuint32_t

ISR[8];

//中断使能状态寄存器__Iuint32_t

IPR[8];

//中断挂起状态寄存器__IOuint32_t

ITHRESDR;

//中断优先级阈值配置寄存器__IOuint32_t

RESERVED;

//保留__IOuint32_t

CFGR;

//中断配置寄存器__Iuint32_t

GISR;

//中断全局状态寄存器

uint8_t

VTFIDR[4];

//中断ID配置寄存器

uint8_t

RESERVED0[12];__IOuint32_t

VTFADDR[4];

//中断偏移地址寄存器

uint8_t

RESERVED1[0x90];__Ouint32_t

IENR[8];

//中断使能设置寄存器

uint8_t

RESERVED2[0x60];__Ouint32_t

IRER[8];

//中断使能清除寄存器

uint8_t

RESERVED3[0x60];__Ouint32_t

IPSR[8];

//中断挂起设置寄存器

uint8_t

RESERVED4[0x60];__Ouint32_t

IPRR[8];

//中断挂起清除寄存器

uint8_t

RESERVED5[0x60];__IOuint32_t

IACTR[8];

//中断激活状态寄存器

uint8_t

RESERVED6[0xE0];__IOuint8_t

IPRIOR[256];

//中断优先级配置寄存器

uint8_t

RESERVED7[0x810];__IOuint32_t

SCTLR;

//系统控制寄存器}PFIC_Type;CH32V307芯片中断和异常向量表//例EXTI0中断处理函数voidEXTI0_IRQHandler(void){

if(EXTI_GetITStatus(EXTI_Line0)!=RESET)//中断标志位判断,确认进入中断

{

i++;//按键一次就进入一次该中断,i就加1EXTI_ClearITPendingBit(EXTI_Line0);/*清除中断标志位*/

}}voidmain(void){Delay_Init();//延迟函数初始化USART_Printf_Init(115200);//初始化串口

EXTI0_INT_INIT();//初始化EXTI0

while(1)

{

printf(“i=%d\r\n",i);}}例:中断线EXTI0的中断配置#include"debug.h“uint16_ti=0;voidEXTI0_INT_INIT(void){

GPIO_InitTypeDefGPIO_InitStructure;

EXTI_InitTypeDefEXTI_InitStructure;

NVIC_InitTypeDefNVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

//使能时钟GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//设置为按键的引脚号GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//上拉输入GPIO_Init(GPIOA,&GPIO_InitStructure);

/*GPIOA---->EXTI_Line0*/GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);EXTI_InitStructure.EXTI_Line=EXTI_Line0;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿触发中断EXTI_InitStructure.EXTI_LineCmd=ENABLE;//中断线使能EXTI_Init(&EXTI_InitStructure);NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;//中断线设置NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;//响应优先级NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//中断通道使能

NVIC_Init(&NVIC_InitStructure);}使用外部硬件中断步骤1)配置GPIO操作;2)配置触发沿,选择上升沿触发、下降沿触发或双边沿触发;3)在内核的NVIC/PFIC中配置EXTI中断,以保证其可以正确响应;4)在中断处理函数中编程需要实现的功能。按键中断控制LED1的亮灭SW1的端口PE4配置为输入LED的端口PE11配置为输出Timer定时器(Timer)

定时器最基本的功能就是定时,比如定时发送USART数据、定时采集AD数据等等。如果把定时器与GPIO结合起来使用的话可以实现非常丰富的功能,可以测量输入信号的脉冲宽度,可以生产输出波形。定时器生产PWM波控制电机状态也是工业控制的普遍方法。CH32V307系列控制器有4个高级定时器、4个通用定时器和2个基本定时器。高级定时器结构基本定时器框图①时钟源:定时器要实现计数必须有个时钟源,基本定时器时钟只能来自内部时钟,高级控制定时器和通用定时器还可以选择外部时钟源或者直接来自其他定时器。②控制器:定时器控制器控制定时器实现的功能,控制定时器复位、使能、计数是其基础功能,基本定时器还专门用于DAC转换触发。③时基单元:主要包括计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)与自动重载寄存器(TIMx_ARR)。预分频器

预分频器分频由1变为4时的计数器时序图

预分频器可对计数器时钟频率进行分频,分频系数介于1和65536之间。该预分频器的分频系数基于16位预分配器(TIMx_PSC)寄存器。由于TIMx_PSC控制寄存器具有影子寄存器(即右图缓冲区),因此可对预分频器进行实时更改,即使定时器正在工作中也可以进行读写操作。而新的预分频系数将在下一更新事件发生时被采用。计数模式定时器运行过程中,更新自动重载寄存器(TIMx_ARR),左图为ARPE=0,右图为ARPE=1

基本定时器只支持向上计数模式,计数器从0计数到自动重载值(TIMx_ARR寄存器的值),生成计数器上溢事件并重新从0开始计数。

自动重载寄存器(TIMx_ARR):如果定时器控制寄存器中的ARPE位为0,ARR寄存器的内容将直接写入影子寄存器(立即生效);如果ARPE为1,ARR寄存器的值将在每次的更新事件发生时,传送到影子寄存器(下次生效);PWM输出

假定定时器工作模式设置为向上计数PWM模式(基本定时器不支持),且当计数器寄存器(TIMx_CNT)的值<捕获/比较寄存器(CCR)的值,输出1;当CNT>=CCR时,输出0。

当CNT计数到ARR的值时,重新归零,然后重新向上计数,依次循环。

因此,改变CCR的值,就可以改变PWM输出的占空比,改变ARR的值,就可以改变PWM输出的周期(频率)。定时器寄存器基本初始化结构体输出比较初始化结构体输入捕获初始化结构体使用定时器PWM输出步骤1)配置并初始化输出的GPIO;2)配置并初始化定时器基本结构体;3)配置并初始化定时器输出比较结构体;4)启动定时器。实战项目1:精确定时LED闪烁实战项目1:精确定时LED闪烁实战项目2:输出PWM控制电机转速赤菟开发板在其扩展口上。有端口PD3为TIM10的CH2输出,可以通过对TIM10的设置控制PD3输出PWM波形,通过外扩的电机驱动电路可以控制电机的转速AINl为1,AIN2为0与PWMA为1时,则电动机正转AINl为0,AIN2为1与PWMA为1时,则电动机反转实战项目2:输出PWM控制电机转速CH32V307的ADCAD采样在电路中是一种比较常见的功能,其将模拟信号转化成为数字信号。可以用于电池电压检测、模拟传感器值的读取、信号采集等。307MCU的ADC模块包含2个12位逐次逼近型的AD转换器,最高14MHz的输入时钟。支持16个外部通道和2个内部信号源通道。可以实现通道的单次转换、连续转换、通道间自动扫描、间断模式、外部触发模式等功能。规则组:被选入规则组的通道会被正常采样和转换。所有规则组的通道数据只被保存在一个16位数据缓冲区中。注入组:被选入注入组的通道,可以在触发事件发生的时候打断规则组的转换。规则组和注入组均可独立设置外部触发源,产生各自的DMA请求与中断信号ADC的基本架构规则组转换与注入组转换在电机控制过程中,利用通用定时器输出通道触发规则转换采样温度、电压等数值,利用TIM1输出通道4触发注入转换采样单电阻电流值。CH32V307MCUADC的转换模式单次单通道转换模式对当前1个通道只执行一次转换。该模式对规则组或注入组中排序第1的通道执行转换,单次扫描模式转换此模式用来扫描一组模拟通道,对被ADC_RSQR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论