刚报名参加了第五届飞思卡尔智能车竞赛的时候,知道要用飞思卡尔的16位单片机,当时也没在意,就随便买了本这方面的书,记得书名是:《基于HCS12的嵌入式系统设计》,我是因为这本书各模块后面的例子都是以智能车为主,我才买的,本以为买对书了,还洋洋得意,可惜啊,可惜……
悲剧发生在拿到真正拿到芯片的时候,以无比激动的心情把以前写的程序烧进去实验,一开始都还好,到了ECT定时模块就发生悲剧了,一大串的错误,然后仔细研究才发现书上讲的是DG128,而我拿到的芯片是XS128,怎么能不错呢?
后面仔细搜索,DG128和XS128区别还真的蛮大的,相对于平时使用来说,主要在ECT和AD这两块地方,像定时器模块这部分,查了很多资料,最后发现XS128没有DG128所具有的MDC模数递减计数器模块,相对应的是PIT定时模块,还有比如没有了模糊指令的硬件支持,没有了i2c模块等等。
言归正传,开始讲PIT,讲PIT,我准备先简单讲讲寄存器,之前不讲主要是基本上买的到的书都是DG128的,里面关于IO口的寄存器和PWM的寄存器都是完全可以照搬的,而这一章的东西照搬是要出问题的。
核心内容就在这张图上:
相信大家都明白总线的概念,在图中可以看到6个定时器模块,Micro Timer 0、Micro Timer 1、Timer 0、Timer 1、Timer 2、Timer 3,其中前两个是8位的,后四个是16位的。从图中可以看出PIT模块是以总线时钟(Bus Clock)为基准时钟的,总线时钟通过8位Micro Timer 0和Micro Timer 1倍频形成两个基时钟,即Micro Timer Base 0和Micro Timer Base 1,这两个基时钟通过16位Timer给PIT提供时钟(通过寄存器PITMUX设置)。
原理讲完了,其实相对于PIT模块是一个24位的定时器(51单片机最多也就16位),这个计数范围还是蛮大的。
下面是一些寄存器的解释,解释完还是看代码吧。
S12PIT24B4CV1是一个模数递减计数器。首先给计数寄存器设定一个初值,每经过一个总线周期,计数器进行一次减一操作,当计数器自减溢出时,触发中断。因为总线周期是已知的,即可以通过计数器自减实现定时。
在XS128PIT模块中,需要用到得是如下几个寄存器。
1)、PIT Contorl and force Lad Micro Timer Register(PITCFLMT)
该寄存器用于PIT模块的使能设置和工作方式设置。通常设置该寄存器中的PITE为即可,即PITCFLMT_PITE=1,使PIT使能。
2)、PIT Channel Enable Register(PITCE)
该寄存器用于对PIT模块中的4个通道使能进行设置。如果使用某个通道时,对对应位进行置一即可,即PITCE_PCEx=1,其中x代表通道序号,为0~3。
3)、PIT Micro Timer Load Register 0 to 1 (PITMTLD0-1)
该寄存器用于设置PIT模块中的8位计数器初值,以实现24位的计数。设定值为0到255范围。
4)、PIT Load Register 0 to 3(PITLD0-3)
该寄存器用于设置PIT模块中的16位计数器初值,和8位计数器配合而成24位计数器。设定值范围0-65535。
5)、PIT Multiplex Register(PITMUX)
该寄存器对定时器通道的8位时基进行选择。因为8位计数器只有两个,所以在将8位计数器和16位计数器连接时,可以选择不同的8位时基。
当设置为0时,对应通道选择时基0;置一时,对应通道选择时基1。
如PITMUX_PMUX0=1为通道0选择时基1。
6)、PIT Interrupt Enable Register(PITINTE)
该寄存器为中断使能寄存器,为不同的PIT通道中断使能。设定为0时,相应通道中断禁止。置一时,相应通道使能。
如PITINTE_PINTE0=1时,PIT通道0定时中断使能,当计数器递减溢出时,申请中断。
7)、PIT Time-Out Flag Register(PITTF)
该寄存器为溢出标志位,当某一通道的8位计数器和16位计数器递减到0时,该位置一。给改位写1则清除该标志位。
可以通过查询该位来判断定时是否完成。
/****************************************************************
Code Warrior 5.0
Target : MC9S12XS128
Crystal: 16.000Mhz
by:庞辉
芜湖联大飞思卡尔项目组 ******************************************************************/
void PIT_Init(void)
{
PITCFLMT_PITE=0; //关闭PIT
//微定时器的装载寄存器
PITMTLD0= 80-1;//8位定时器初值设定。80分频,在80MHzBusClock下,为1MHz,即1us
//PITMTLD1= 160-1;//8位定时器初值设定,160分频
//定时器的装载寄存器
PITLD0 = 100 - 1 ;//16位定时器初值设定 0.1ms
PITLD1 = 20000 - 1 ;//定时50000*0.001ms = 20ms
PITCE_PCE0=1;//使能通道0
PITCE_PCE1=1;//使能通道1
PITMUX_PMUX0=0;//0:相应16位定时器与微时基0连接
//PITMUX_PMUX1=1;//1:相应16位定时器与微时基1连接
PITINTE_PINTE0=1;//开通PIT0定时器的溢出中断
PITINTE_PINTE1=1;//开通PIT1定时器的溢出中断
PITCFLMT_PITE=1; //使能PIT
}
以上代码一次开通了2路PIT,即PIT0和PIT1,初始化之后主要写上相对应的中断代码就可以了。
如:
/****************************************************************
Code Warrior 5.0
Target : MC9S12XS128
Crystal: 16.000Mhz
by:庞辉
芜湖联大飞思卡尔项目组 ******************************************************************
/#pragma CODE_SEG __NEAR_SEG NON_BANKED //指示该程序在不分页区
void interrupt 66 PIT0(void)
{
//相应代码
PITTF=0x01;//清中断标志位
}
#pragma CODE_SEG DEFAULT
#pragma CODE_SEG __NEAR_SEG NON_BANKED //指示该程序在不分页区
void interrupt 67 PIT1(void)
{
//相应代码
PITTF=0x02;//清中断标志位
}
#pragma CODE_SEG DEFAULT
这里要注意两个地方:
1.首先两路PIT同时使用时,在中断函数里清中断标志位一定要使用如上方面还不是像这样PITTF_PTF0 = 1; 不然两路PIT其实只有1路在工作。
2.一旦PIT中断初始化使能,那么代码里一定要有中断函数,如果没有,编译不会报错,但是可怕的是一定运行会出现不可预估的后果。
以上两点都曾经使我郁闷了N久才知道是怎么回事,一般的书上都不会提,像我买的那本书,其实要我现在说,就是某某人把官方的Datesheet给翻译了一下而已,实属害人不浅。
上一篇:飞思卡尔XS128系列(二) PWM模块
下一篇:飞思卡尔智能车 电机PID
推荐阅读
史海拾趣
Foxconn Optical Interconnect Technologies Inc. 的五个发展故事
故事一:创立与初步发展
Foxconn Optical Interconnect Technologies Inc.(简称FIT),作为鸿海精密工业股份有限公司(Foxconn,又称富士康)旗下的子公司,其发展历程可以追溯到富士康的崛起。富士康由郭台铭于1974年在台湾创立,起初主要生产塑料零件。随着电子行业的蓬勃发展,富士康迅速转型,开始涉足电子制造服务(EMS)。在这一背景下,FIT应运而生,专注于光机电整合连接器、天线、声学元件等产品的研发与生产,逐渐在电子行业中崭露头角。
故事二:技术突破与全球化布局
FIT凭借其在光电互连技术领域的不断创新,逐步确立了在全球市场的领先地位。公司通过持续加大研发投入,成功开发出一系列高性能、高可靠性的产品,广泛应用于电脑、通讯、消费电子等多个领域。同时,FIT积极实施全球化战略,在亚洲、北美、南美和欧洲等地设立生产基地和研发中心,形成了覆盖全球的生产和服务网络。这一布局不仅提升了公司的市场竞争力,也为其未来的发展奠定了坚实基础。
故事三:与富圣光电的合作
FIT与富圣光电科技(昆山)有限公司的合作是其发展历程中的一个重要里程碑。富圣光电作为富士康旗下专注于光电科技领域的企业,与FIT在技术研发、产品生产等方面展开了深度合作。通过资源共享和优势互补,双方共同推动了光电技术的发展和应用。目前,FIT持有富圣光电50%的股份,这一合作不仅增强了双方在光电市场的竞争力,也为双方带来了显著的经济效益。
故事四:收购夏普与技术整合
2016年,富士康(鸿海精密工业股份有限公司)成功收购日本夏普公司,这一举动对FIT的发展产生了深远影响。夏普在显示技术、半导体等领域拥有强大的技术实力和市场地位,而FIT则擅长光电互连技术的研发和生产。通过此次收购,FIT得以将夏普的先进技术与自身优势相结合,进一步提升了在光电领域的综合竞争力。同时,这也为FIT拓展国际市场、提升品牌影响力提供了有力支持。
故事五:新能源汽车领域的探索
近年来,随着新能源汽车市场的快速崛起,FIT也开始将目光投向这一新兴领域。公司利用自身在光电技术方面的优势,积极研发新能源汽车充电系统、光电传感器等关键零部件。通过不断的技术创新和市场拓展,FIT在新能源汽车领域取得了初步成果。这一领域的探索不仅为公司带来了新的增长点,也为其在光电技术领域的持续发展注入了新的动力。
Delus Corp公司深知持续创新对于公司发展的重要性。因此,公司投入大量资源进行研发,并不断探索新技术和新材料。同时,公司也高度重视产品质量,建立了严格的质量管理体系,确保每一件产品都符合高标准的质量要求。这些努力使得公司的产品线不断丰富,产品质量得到了广大客户的认可。
面对日益严峻的环境保护问题,DZUS公司积极响应国家号召,制定了可持续发展战略。公司采用环保材料和生产工艺,减少了对环境的污染和破坏。同时,公司还加大了对可再生能源的研发和应用力度,致力于推动绿色生产和可持续发展。这些举措使DZUS公司成为了行业的环保标杆,并赢得了社会各界的广泛赞誉。
随着公司实力的增强,DZUS公司开始拓展国际市场。通过参加国际展览、与海外客户建立合作关系等方式,公司逐渐打开了国际市场的大门。同时,公司还针对不同国家和地区的市场需求,推出了定制化的产品和服务。这些举措使DZUS公司的品牌知名度和市场份额不断提升。
EnerSys一直致力于技术创新和研发投入。公司拥有一支专业的研发团队,不断推出具有竞争力的新产品和解决方案。例如,EnerSys在锂电池领域取得了重要突破,成功开发出高能量密度、长寿命的锂电池产品。这些创新产品不仅满足了客户的多样化需求,还推动了公司在电子行业中的持续发展。
在快速发展的同时,Aptina注重技术研发与专利布局。公司投入大量资源用于研发,不断推出具有创新性的图像传感器产品。这些产品不仅提升了公司的市场竞争力,还为Aptina积累了大量的技术专利。这些专利成为了公司宝贵的资产,为公司的长期发展奠定了坚实基础。
我,大二的小童鞋,软件工程 这个暑假打算在实验室好好研究一下驱动程序的开发,以后也想在这一块发展 不知目前搞驱动开发的就业如何,待遇咋样,过来人帮忙给分析一下下 小弟这里多谢了… 查看全部问答∨ |
|
赛灵思业界首款20nm ALL Programmable 产品开始发货了 半导体产业界首款20nm产品,也算个小里程碑了。 https://www.eeworld.com.cn/FPGA/2013/1112/article_3407.html… 查看全部问答∨ |