LKS32mc081_083_088系统板+低中功率板学习之Systick
本次主要学习的内容是针对南京凌鸥推出的LKS32MC08系列的学习记录,后面慢慢上手搭建foc控制框架,调试一款电机。
系统滴答计时器Systick
LKSMC08x系列主要采用的Cortex-M0内核的设计,Sysytic是M0自带的一个系统滴答计时器,主要为嵌入式系统提高基础的定时服务,本记录时式针对凌鸥该芯片系列的芯片,初始化配置相关寄存器,用Systick实现精准的ms的延时,LKS08x系列的滴答计时器的相关配置寄存器主要有3个
控制和状态寄存器主要是配置Systick基本的时钟使能,分频系数,中断使能,以及回零标志的清除
重装载寄存器主要配置定时器的计数周期值。当前寄存器可以查看当前计数值cnt
2.软件设计
针对Systick的配置实现比较简单,主要配置流程如下,在进行软件配置之前,学习了解以下针对功能简单的一个偏食外设,底层驱动的配置手法,这里主要是针对ST的手法进行学习
已知一个外设的偏移地址,如Systick的偏移地址,在该芯片的设计中为0x0010UL即32B,而且该外设的需要配置的寄存器有若干,如Systick的寄存器有三个,分别为控制与状态,重装载,当前计数值,那么我们可以采用如下定义,用来后期可以方便的操作每个寄存器
定义Systick配置寄存器对应的结构成员,每个成员的类型 IM对应只读,IOM对应读/写均可
定义Sysytick的基地址=核起始地址+偏移地址
将每个成员变量,与地址相对应起来,以便可以直接操作成员变量即是操作对应寄存器
通过以上的配置,那么我们想要操作其中某一个寄存器,比如将装载值写入900,那么直接调用
Systick—>Load= 900;即可
当然为了可以更方便的操作寄存器的莫一位,ST对Systick寄存器某一位能实现什么功能作了宏定义的Mask
这样当我们想将Systick的时钟源选择主频,中断使能打开,定时器时钟打开,那么我们可以写成
Systick->CTRL = Systick_CTRL_CLKSOURCE_Msk | Systick_CTRL_TICKINT_Msk |Systick_CTRL_ENABLE_Msk
效果和Systick->CTRL = Bit(0)| Bit(1)|Bit(2)是一样的
2.配置流程
设置计数的周期值
配置计数器的初始值(凌鸥的芯片这个寄存器默认是只读的,默认为0)
调用NVIC使能Systick中断
配置控制与状态寄存器的时钟和中断的使能
6.问题总结
关于ST这种对于Systick,NVIC这些模块的底层驱动的写法是一种方式,瑞萨的一种写法和ST比较像,这里作一个简单的记录,例如多功能定时器MTU模块,他会利用union的方式,把mtu模块的关键位都定义好
然后在采用宏定义将mtu的基地址对齐
这样就可以直接操作寄存器的对应的特定的位
MTU.TSTRA.BIT.CST0=0;
但是这两种底层的架构,这个union和struct的区别在哪?具体都是32位的处理器,哪一种更具有优势呢?#每日话题# #技术资源#
|