飞思卡尔S12系列寄存器和中断讲解

合集下载

飞思卡尔S12G系列芯片Demo程序之【按键中断实验】

飞思卡尔S12G系列芯片Demo程序之【按键中断实验】

1、按键中断#include <hidef.h>#include "derivative.h"#define LED PORTA#defineLED_dirDDRA#define KEY1PTIJ_PTIJ0#define KEY2PTIJ_PTIJ1#define KEY3 PTIJ_PTIJ2#define KEY4PTIJ_PTIJ3#define KEY1_dirDDRJ_DDRJ0#define KEY2_dir DDRJ_DDRJ1#define KEY3_dir DDRJ_DDRJ2#define KEY4_dir DDRJ_DDRJ3unsigned char data=0x01;unsigned char direction=1; //设置灯亮的方向,0向左,1向右。

unsigned char time=5; //设置灯闪的速度。

/*************************************************************/ /* 延时函数*/ /*************************************************************/ void delay(unsigned int n){unsignedinti,j;for(j=0;j<n;j++)for(i=0;i<40000;i++);}/*************************************************************/ /* 初始化LED灯*/ /*************************************************************/ voidinit_led(void){LED_dir=0xff; //设置为输出LED=~data; //点亮LED1}/*************************************************************/ /* 初始化按键*/ /*************************************************************/ voidinit_key(void){KEY1_dir =0; //设置为输入KEY2_dir=0;KEY3_dir=0;KEY4_dir=0;PPSJ = 0x00; //极性选择寄存器,选择下降沿;PIFJ = 0x0f; //对PIFJ的每一位写1来清除标志位;PIEJ = 0x0f; //中断使能寄存器;}/*************************************************************/ /* 按键中断函数*/ /*************************************************************/ #pragma CODE_SEG __NEAR_SEG NON_BANKEDinterrupt void PTJ_inter(void){if(PIFJ != 0) //判断中断标志{PIFJ = 0xff; //清除中断标志if(KEY1 == 0) //按键1按下{time-=1;if(time==0)time=1;}if(KEY2 == 0){time+=1;if(time>10)time=10;}if(KEY3 == 0)direction=0;if(KEY4 == 0)direction=1;}}#pragma CODE_SEG DEFAULT/*************************************************************/ /* 主函数*/ /*************************************************************/ void main(void){DisableInterrupts;init_led();init_key();EnableInterrupts;for(;;){delay(time);if(direction==1){data=data<<1; //左移一位if(data==0)data=0x01;}else{data=data>>1; //右移一位if(data==0)data=0x80;}LED = ~data;}}2、按键中断#include <hidef.h>#include "derivative.h"#define LEDCPU PORTD_PD3#define LEDCPU_dirDDRD_DDRD3unsigned char single = 0;/*************************************************************/ /* 初始化锁相环*/ /* 使用外部晶振:16MHz */ /* 设置总线频率:16MHz */ /*************************************************************/ void INIT_PLL(void){CPMUPROT=0x26; //解除时钟配置保护CPMUCLKS_PSTP = 0; //禁止PLLCPMUCLKS_PLLSEL = 1; //设置PLLCLK为系统时钟CPMUOSC_OSCE=1; //使能外部晶振CPMUSYNR=0x01; //SYNDIV的值为1,CPMUREFDIV = 0x81; //REFDIV的值为1CPMUPOSTDIV=0x00;CPMUPLL=0x10; //锁相环调频启用,用以减少噪音while(CPMUFLG_LOCK==0); //等待PLLCLK锁定CPMUPROT=0x01; //使能时钟配置保护}/*************************************************************//* 初始化实时中断*//*************************************************************/void INIT_RTI(void){CPMUPROT=0x26; //解除时钟配置保护CPMUCLKS_RTIOSCSEL = 1; //RTI时钟源为晶振时钟CPMUINT = 0x80; //使能实时中断CPMURTI = 0x6f; //设置实时中断的时间间隔为32.768ms,根据机器周期求得CPMUPROT= 0x01; //使能时钟配置保护}/*************************************************************//* 实时中断函数(声明中断函数)*//*************************************************************/#pragma CODE_SEG __NEAR_SEG NON_BANKED/*中断函数置于非分页区内,由于飞思卡尔16位单片机的中断向量是16位所以中断函数只有被置于非分页区内才能被寻址到,这就是第一行的作用*///#pragma主要作用是设定编译器状态,指示编译器完成一些特定动作interrupt void RTI_inter(void){if(CPMUFLG_RTIF == 1)CPMUFLG_RTIF = 1;single +=1;if (single==15){LEDCPU = ~LEDCPU;single = 0;}}#pragma CODE_SEG DEFAULT/*后续代码置于默认区内,由于单片机内部非分页区大小有限,非中断函数一般置于分页区内,最后一行即为此作用*//*************************************************************//* 主函数*//*************************************************************/void main(void){DisableInterrupts;INIT_PLL();INIT_RTI();LEDCPU_dir = 1;LEDCPU = 0;EnableInterrupts;for(;;){}}以上Demo程序已通过本人亲自验证,可实现相关功能,对代码中有疑问的朋友欢迎在主页区留言交流。

飞思卡尔MC9S12G系列芯片之【GPIO】模块总结

飞思卡尔MC9S12G系列芯片之【GPIO】模块总结

位数 8 8 8 8 2
小注: a. 由上表可知,这五个寄存器通过同一个电阻控制寄存器 PUCR 的 0~4 位分别
对应控制端口 A~D;
b. 在学习板中(这是前提,以下模块与寄存器的连接仅限此开发板):
LED 灯是通过 PORTA 寄存器控制,LED1~LED8 分别对应 PORTA 的 P0~P7 位(注意
置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发 置 0:中断禁止 置 1:中断使能 置 0:无极性沿发生 置 1:有极性沿发生
位数 8
8
端口 P 和 J 都含有 7 个寄存器,其中与中断有关的寄存器有两个:
中断使能寄存器 PIEx 及中断标志寄存器 PIFx。
置 0:低电平 置 1:高电平 用于检测过载或输出 引脚短路条件 置 0:输入 置 1:输出 置 0:上拉设备禁止 置 1:上拉设备使能 置 0:下降沿触发 置 1:上升沿触发
WOMN 寄存器为 PORTS 和 PORTM 特有的寄存器,不常用。
位数 8
8
端口名称
寄存器种类 数据寄存器(PTT)
PORTT (PT)
GPIO 模块总结(以 MC9S12G128 为例)
一、常见功能
功能 设置输入/输出端口 设定 I/O 口的高低电平 选择内置上拉/下拉电阻 中断输入方式的选择 驱动能力的设置
需配置寄存器 DDRx(置 0 为输入,置 1 时为输出) PORTx(置 0 低电平、置 1 高电平) PERx PIEX XS128 芯片具有
EnableInterrupt;
// 定义主函数
// 禁止中断 // 设置 I/O 方向为输出 / *对 data 取反后为 0111 1111,因 LED 在低

飞思卡尔11章 S12串行通信模块

飞思卡尔11章 S12串行通信模块
重庆大学通信工程学院 任勇
1 1 2 3 4 5 6 7 8
11.2 SCI串行通信接口 SCI串行通信---异步通信,最常用;SCI基本概念: 1、异步串行通信的格式(NRZ,8位或9位,异步通信:每一数据块的字符以起
始位“0”表示开始;停止位 “1”表示结束)
开始位 第0位 第1位 第2位 第3位 第4位 第5位 第6位 第7位 停止位
SBR7 SBR6 SBR5 SBR4
SBR3 SBR2 SBR1
波特率计算公式:波特率=总线频率/(16xBR),编程时按16位送数,如: LDX #13 STX SCI0BD ; 2MHz/(16x13)=9600bps
重庆大学通信工程学院 任勇
(2) SCI控制寄存器---SCIxCR1、SCIxCR2
P
P
0
1
2
3
4
5
6
7
L
1
1
1
1
1
3
4
5
6
2
1
1
0
1
2
3
4
5
1
1 6
2
1 5
3
1 4
4
1 3
5
1 2
6
1 1
7
1 0
【实例】SPI输入的开关检测。(74LS165:并入串出)
8
9
1
1
1
1
1
1
1
6
5
4
3
2
1
0
9
1
R
VCC
0
1
SW-DIP8
S K
使用SPI,节省MCU的引脚,但须增加外接移位寄存器。

飞思卡尔单片机S12使用方法及程序

飞思卡尔单片机S12使用方法及程序

飞思卡尔单片机S12使用方法及程序单片机简介:9S12XS128MAA单片机是16位的单片机80个引脚,CPU是CPU12X,内部RAM 8KB,EEPROM:2KB,FLASH:128KB,外部晶振16M,通过内部PLL可得40M总线时钟。

9S12XS128MAA单片机拥有:CAN:1个,SCI:2个,SPI:1个,TIM:8个,PIT:4个,A/D:8个,PWM:8个下面介绍下我们项目用到的几个模块给出初始化代码1、时钟模块初始化单片机利用外部16M晶振,通过锁相环电路产生40M的总线时钟(9S12XS128系列标准为40M),初始化代码如下:view plaincopy to clipboardprint?/******************系统时钟初始化****************/void Init_System_Clock(){asm { // 这里采用汇编代码来产生40M的总线LDAB #3STAB REFDVLDAB #4STAB SYNRBRCLR CRGFLG,#$08,*//本句话含义为等待频率稳定然后执行下一条汇编语句,选择此频率作为总线频率BSET CLKSEL,#$80}}/******************系统时钟初始化****************/void Init_System_Clock(){asm { // 这里采用汇编代码来产生40M的总线LDAB #3STAB REFDVLDAB #4STAB SYNRBRCLR CRGFLG,#$08,*//本句话含义为等待频率稳定然后执行下一条汇编语句,选择此频率作为总线频率BSET CLKSEL,#$80}上面的代码是汇编写的,这个因为汇编代码量比较少,所以用它写了,具体含义注释已经给出,主函数中调用此函数即可完成时钟初始化,总线时钟为40M.2、SCI模块初始化单片机电路做好了当然少不了和PC之间的通信,通信通过单片机串口SCI链接到PC 端的COM口上去。

飞思卡尔单片机中断

飞思卡尔单片机中断

在CW4.6环境下,中断编程主要有两种方式: 第一种是使用“interrupt‖关键字,―interrupt‖关键字是一个非标准ANSI-C的关键字,因此,它不能被所有ANSI-C编译器厂商所支持 。同样,对不同的编译器,interrupt‖关键字的用法可能会改变。“interrupt‖关键字同样会提示编译器下面的函数是一个中断服务例程。 例: void interrupt 20 SCI0_ISR(void); 其中,interrupt表示该函数为终端服务程序,后面的20表示中断号20,在这里SCI0的中断向量号就是20. 这种方法写起来非常简单,但是,在S12单片机实际使用中,中断号并没有在手册中给出,通常需要自己在中断向量表中从上往下 数出来,或者根据中断向量计算得到,很容易出错。 于是有了第二种方法: 在ISR程序之前,使用符号“#pragma TRAP_PROC‖,TRAP_PROC 提示编译器下面的函数是中断服务例程。编译器会用一个特 殊的中断返回指令来结束这个函数。 此时,中断函数的书写如下所示: #pragma TRAP_PROC void SCI0_ISR(void){ ...} 这时候编译器不知道这个ISR指向那个中断向量,我们需要在链接文件即:prm文件中指定之。 使用 VECTOR命令来实现中断向量与ISR程序的连接。 例:VECTOR 0 _Startup //这是系统默认prm文件中自带的,即复位后0号中断即复位中断的ISR为_Startup() 我们可以这样写: VECTOR 20 SCI0_ISR //指定中断号 或者 VECTOR ADDRESS 0xFFD6 SCI0_ISR //直接指定中断向量地址 注:使用#pragma TRAP_PROC与修改prm文件的方法,在中断服务子程序的结尾处必须要手动加入返回主程序的指令,包括取 出堆栈、中断返回两个步骤。 在S12单片机中,可以写作 asm { pula; rti;} 尾注: 两种方法所写的中断服务子程序必须被放在非分页存储区内,即non_blanked code seg. 其中一种常用的方法是在服务子程序前声明://下面代码放在NON_BANKED区 #pragma CODE_SEG NON_BANKED 在中断程序后声明://下面内容按默认放置 #pragma CODE_SEG DEFAULT Freescale Semiconductor Confidential and Proprietary Information. Freescale™ and the Freescale logo are trademarks of Freescale

飞思卡尔MC9S12XS128(定时器)ECT寄存器详解

飞思卡尔MC9S12XS128(定时器)ECT寄存器详解

1、定时器IC/OC功能选择寄存器TIOSIOS[7..0]IC/OC功能选择通道0 相应通道选择为输入捕捉(IC)1 相应通道选择为输出比较(OC)2、定时器比较强制寄存器 CFORCFOC[7..0]设置该寄存器某个FOCn位为1将导致在相应通道上立即产生一个输出比较动作,在初始化输出通道时候非常有用。

【说明】这个状态和正常状态下输出比较发生后,标志位未被置位后的情况相同。

3、输出比较7屏蔽寄存器 OC7MOC7M[7..0]OC7(即通道7的输出比较)具有特殊地位,它匹配时可以直接改变PT7个输出引脚的状态,并覆盖各个引脚原来的匹配动作结果,寄存器OC7M决定哪些通道将处于OC7的管理之下。

OC7M中的各位与PORTT口寄存器的各位一一对应。

当通过TIOS将某个通道设定为输出比较时,将OC7M中的相应位置1,对应的引脚就是输出状态,与DDR中的对应位的状态无关,但OC7Mn并不改变DDR相应位的状态。

【说明】OC7M具有更高的优先级,它优于通过TCTL1和TCTL2寄存器中的OMn和OLn设定的引脚动作,若OC7M中某个位置1,就会阻止相应引脚上由OM和OL设定的动作。

4、输出比较7数据寄存器 OC7DOC7D[7..0]OC7M对于其他OC输出引脚的管理限于将某个二进制值送到对应引脚,这个值保存在寄存器OC7D中的对应位中。

当OC7匹配成功后,若某个OC7Mn=1,则内部逻辑将OC7Dn送到对应引脚。

OC7D中的各位与PORTT口寄存器的各位一一对应。

当通道7比较成功时,如果OC7M中的某个位为1,OC7D中的对应位将被输出到PORTT的对应引脚。

【总结】通道7的输出比较(OC7)具有特殊的位置,在OC7Mn和OC7Dn两个寄存器设置以后,OC7成功输出后将会引起一系列的动作。

比如:OC7M0=1,则通道0处在OC7的管理下,在OC7成功后,系统会将OC7D0的逻辑数据(仅限0或者1)反应在PT0端口上。

飞思卡尔MC9S12XS128单片机中断优先级设置简易教程

飞思卡尔MC9S12XS128单片机中断优先级设置简易教程

本教程试图用最少的时间教你飞思卡尔XS128单片机的中断优先级设置方法和中断嵌套的使用,如果是新手请先学习中断的基本使用方法。

先来看看XS128 DataSheet 中介绍的相关知识,只翻译有用的:七个中断优先级每一个中断源都有一个可以设置的级别高优先级中断的可以嵌套低优先级中断复位后可屏蔽中断默认优先级为1同一优先级的中断同时触发时,高地址(中断号较小)的中断先响应注意:高地址中断只能优先响应,但不能嵌套同一优先级低地址的中断下面直接进入正题,看看怎么设置中断优先级:XS128中包括预留的中断一共有128个中断位,如果为每个中断都分配一个优先级寄存器的话会非常浪费资源,因此飞思卡尔公司想出了这样一种办法:把128个中断分为16个组,每组8个中断。

每次设置中断时,先把需要的组别告诉某个寄存器,再设置8个中断优先寄存器的某一个,这样只需9个寄存器即可完成中断的设置。

分组的规则是这样的:中断地址位7到位4相同的中断为一组,比如MC9SX128.h中这些中断的位7到位3都为D,他们就被分成了一组。

0~F正好16个组。

INT_CFADDR就是上面说到的用来设置组别的寄存器:我们需要设置某个组别的中断时,只要写入最后8位地址就行了,比如设置SCI0的中断优先级,就写入0xD0。

设置好组别之后,我们就要该组中相应的中断进行设置,设置中断的寄存器为这其实是一组寄存器,一共有8个,每个都代表中断组中的一个中断。

对应规则是这样的:中断地址的低四位除以2比如还是SCI0,低四位是6,除以二就是3,那么我们就需要设置INT_CFDATA3 往INT_CFDATAx中写入0~7就能设置相应的中断优先级了拿我本次比赛的程序来举个例子:我们的程序中需要3个中断:PIT0,PORTH,SCI0。

PIT0定时检测传感器数值,PORTH连接干簧管进行起跑线检测,SCI0接收上位机指令实现急停等功能。

因此中断优先级要SCI0>PORTH>PIT0。

freescale S12 IO和中断

freescale S12 IO和中断

MC9S12XS128中断模块S12微控制器的中断源:特殊中断源、外部中断源、端口中断源、定时中断源、通信中断源、A/D中断源等。

中断过程①外部或内部中断源提出中断请求,如果存在中断标志位,则硬件置相应中断标志位。

②如果开放了CPU对相应中断源的中断请求的响应,CPU将暂停当前程序段的执行,I清0,即关中断,将断点地址与相关寄存器的值压入堆栈保护起来。

③跳转到中断入口地址执行指令,进而执行中断服务程序。

中断服务程序中清标志位。

④将压入堆栈的数据放回相关寄存器,断点地址放回PC。

⑤返回暂停的程序段继续执行。

1、不可屏蔽中断XIRQ中断入口地址:$fff4、$fff5。

C语言中断号:5。

(1)中断允许位X将CCR中的X位清0,就开放了CPU对XIRQ中断请求的响应。

C语言程序中,使用如下指令可开放XIRQ的中断:ASM LDAA #$10;ASM TAP;(2)中断请求信号低电平有效。

(3)实验①实验要求在main()中顺序点亮8支发光管,每次点亮1支。

在XIRQ的中断服务程序中反向点亮8支发光管,每次点亮2支。

②电路连接发光管由A口驱动;将E口与B口连接,由PB0为XIRQ提供中断请求信号。

2、可屏蔽中断IRQ中断入口地址:$fff2、$fff3。

C语言中断号:6。

(1)中断允许总控制位I将CCR中的I位清0,就开放了CPU对可屏蔽中断源的中断请求的响应。

(2)IRQ控制寄存器IRQCR程序中,IRQCR使用符号INTCR代替。

①IRQ中断触发方式选择位IRQE当IRQE=1时,IRQ引脚下降沿触发中断。

当IRQE=0时,IRQ引脚低电平沿触发中断。

②IRQ中断允许控制位IRQEN当IRQEN=1时,IRQ引脚与中断逻辑连接,IRQ中断允许。

当IRQEN=0时,IRQ引脚与中断逻辑断开,IRQ中断禁止。

(3)实验①实验要求在main()中顺序点亮8支发光管,每次点亮1支。

在IRQ的中断服务程序中反向点亮8支发光管,每次点亮2支。

飞思卡尔s12单片机-ATD模块

飞思卡尔s12单片机-ATD模块

Page 6
二、ATD模块简介

• • • • • • •
第十章 单片机片内外模块 ——ATD
S12单片机ADC特性如下:
8/10/12位可选
转换速度较高,8位、8MHz、单次转换时间为2us 采样时间可编程设置 多种转换模式:数据对齐方式、单次/连续转换、转换结果比较 外触发控制 转换序列结束可产生中断,能够使能比较中断 模拟输入引脚与通用I/O口复用 多通道扫描, 1~16 转换序列长度。
ETRIGLE –外部信号触发条件选择位 ETRIGP -
ACMPIE - Internal Clock in Stop Mode Bit 0 = 禁止比较中断 1 = 使能比较中断
ATD Registers 4/12 第十章 单片机片内外模块 ——ATD
ATD Control Register 3 (ATDCTL3)
Page 10
ATD Registers 1/12 第十章 单片机片内外模块 ——ATD
ATD Control Register 0 (ATDCTL0)
WRAP[3-0] - Wrap Around Channel Select
0 = Reserved
X = WRAP[3:0]; 多通道转换模式下,从ANx回绕到AN0 1≤x ≤ 15 仅在ATDCTL5的MULT=1时有效
S8C, S4C,S2C, S1C - Conversion Sequence Length
ATD Registers 5/12 第十章 单片机片内外模块 ——ATD
ATD Control Register 4 (ATDCTL4)
注:写ATDCTL4会终止当前转换序列
SMP[2:0] - Sample Time Select, 采样时间包含的ATD时钟周期

飞思卡尔MC9S12XET256 SCI串口寄存器说明

飞思卡尔MC9S12XET256 SCI串口寄存器说明

串口寄存器说明该模块指南提供了串行通信接口(SCI)模块概述。

SCI的允许与外围设备和其他CPU异步串行通信。

1.1 SCI包括这些特征:•全双工或单线运行•标准标记/空间不归零(NRZ)格式•可选的IrDA1.4返回到零倒置(RZI)与可编程脉冲宽度格式•13位的波特率选择•可编程8位或9位数据格式•分别使能发射机和接收机•可编程极性对发射机和接收机•可编程发送器输出校验•两个接收器唤醒的方法:-唤醒空闲线- 地址标志唤醒•中断驱动的操作有八个标志:-发送器空- 传输完成- 接收器满- 空闲接收器输入- 接收器溢出-噪声误差-帧错误- 奇偶错误- 接收有效边缘唤醒- 发送冲突检测支持LIN-间隔检测支持LIN•接收帧错误检测•硬件奇偶校验•1 / 16位时间噪声检测1.2 操作模式SCI的功能相同在正常、特殊和仿真模式。

它有两种低功耗模式,等待和停止模式。

•运行模式•等待模式•停止模式1.3 寄存器说明1、波特率控制寄存器(SCIBDH、SCIBDL)SCIBDH和SCIBDL一起构成了一个16位的波特率控制寄存器。

SBR12~~SBR0为波特率常数。

IREN:红外调制模式使能位1 使能0 禁止TNP[0..1]:窄脉冲发射位,这些位使能SCI是否能发送一个1 / 16,3 /16,1/ 32或1 / 4的窄脉冲。

见表20-3。

SBR[0..12]:波特率设置位When IREN = 0 then,SCI baud rate = SCI bus clock / (16 x SBR[12:0])When IREN = 1 then,SCI baud rate = SCI bus clock / (32 x SBR[12:1])【说明】波特率发生器在复位后是禁止的,在设置TE、RE(在SCICR2寄存器中)后才会工作。

当(SBR[12:0] = 0 and IREN = 0) 或者(SBR[12:1] = 0 andIREN = 1),波特率发生器不工作。

飞思卡尔中断设置方式

飞思卡尔中断设置方式

中断的关闭与开放开放MC56F8257中某个模块中断,通常需要开放总中断及模块中断来实现。

这两部分缺一不可,并且开放总中断在前,开放模块中断在后。

同理,关闭MC56F8257中某个模块中断,需要关闭总中断及模块中断来实现,先关闭模块中断,再关闭总中断;如果允许中断嵌套情况,不需关闭总中断。

开放MC56F8257总中断,通过清中断控制寄存器(INTC_CTRL)的INT_DIS位;关闭总中断,需置该位即可,具体代码如下:#define EnableInterrupt() INTC_CTRL&=~INTC_CTRL_INT_DIS_MASK#define DisableInterrupt() INTC_CTRL|=INTC_CTRL_INT_DIS_MASK开放或关闭模块中断,需设置模块内部的控制寄存器的相应位。

如开放QSCI模块的接收中断0,需置位QSCI控制寄存器1(QSCIx_CTRL1)中的RFIE位;关闭该中断,清RFIE 位即可,具体代码如下:#define EnableQSCIReInt(0) QSCI_C1(0)|=(QSCI1_CTRL1_RFIE_MASK)#define DisableQSCIReInt(0) QSCI_C1(0)&=(QSCI1_CTRL1_RFIE_MASK)中断优先级的设置DSP56800E内核支持5级中断:LP、0、1、2和3,其优先级别依次升高。

最低优先级LP只能由系统SWILP指令产生;0~2优先级用户可以编程设置,主要用于外设和外部中断请求;级别3是最高优先级且不可屏蔽。

具体设置某个中断源的中断优先级,可通过设置中断优先级寄存器(INTC_IPR0~INTC_IPR7)中的相应位。

如设置QSCI中断优先级,通过设置中断优先级寄存器(INTC_IPR2)中的QSCI0_RCV位实现,该位具体含义见表1所示。

从表1看出,QSCI中断可配置三个不同级别,即优先级0、1和2。

飞思卡尔MC9S12XS128单片机各模块使用方法及寄存器配置

飞思卡尔MC9S12XS128单片机各模块使用方法及寄存器配置

飞思卡尔MC9S12XS128单片机各模块使用方法及寄存器配置手把手教你写S12XS128程序--PWM模块介绍该教程以MC9S12XS128单片机为核心进行讲解,全面阐释该16位单片机资源。

本文为第一讲,开始介绍该MCU的PWM模块。

PWM 调制波有8个输出通道,每一个输出通道都可以独立的进行输出。

每一个输出通道都有一个精确的计数器(计算脉冲的个数),一个周期控制寄存器和两个可供选择的时钟源。

每一个P WM 输出通道都能调制出占空比从0—100% 变化的波形。

PWM 的主要特点有:1、它有8个独立的输出通道,并且通过编程可控制其输出波形的周期。

2、每一个输出通道都有一个精确的计数器。

3、每一个通道的P WM 输出使能都可以由编程来控制。

4、PWM 输出波形的翻转控制可以通过编程来实现。

5、周期和脉宽可以被双缓冲。

当通道关闭或PWM 计数器为0时,改变周期和脉宽才起作用。

6、8 字节或16 字节的通道协议。

7、有4个时钟源可供选择(A、SA、B、SB),他们提供了一个宽范围的时钟频率。

8、通过编程可以实现希望的时钟周期。

9、具有遇到紧急情况关闭程序的功能。

10、每一个通道都可以通过编程实现左对齐输出还是居中对齐输出。

1、PWM启动寄存器PWMEPWME 寄存器每一位如图1所示:复位默认值:0000 0000B图1 PWME 寄存器每一个PWM 的输出通道都有一个使能位P WMEx 。

它相当于一个开关,用来启动和关闭相应通道的PWM 波形输出。

当任意的P WMEx 位置1,则相关的P WM 输出通道就立刻可用。

用法:PWME7=1 --- 通道7 可对外输出波形PWME7=0 --- 通道7 不能对外输出波形注意:在通道使能后所输出的第一个波形可能是不规则的。

当输出通道工作在串联模式时(PWMCTL 寄存器中的CONxx置1),那么)使能相应的16位PWM 输出通道是由PWMEx 的高位控制的,例如:设置PWMCTL_CON01 = 1,通道0、1级联,形成一个16位PWM 通道,由通道 1 的使能位控制PWM 的输出。

飞思卡尔Kinetis芯片中NVIC模块的中断寄存器的介绍及其应用举例

飞思卡尔Kinetis芯片中NVIC模块的中断寄存器的介绍及其应用举例

飞思卡尔Kinetis芯片中NVIC模块的中断寄存器的介绍及其
应用举例
喻宁宁
【期刊名称】《中国集成电路》
【年(卷),期】2013(22)8
【摘要】1 NVIC模块的中断寄存器简介嵌套式向量中断控制器(NVIC)是Cortex内核不可分割的一部分,它与CPU紧密结合,可对系统异常和外设中断进行控制。

如图1所示,NVIC右端连接到各个外围模块,负责对外设中断进行处理;左端连接到内核,负责对内核系统异常进行处理。

本文重点介绍NVIC对外围模块的中断控制。

通常,在配置某个外围模块的中断功能时,
【总页数】4页(P75-78)
【作者】喻宁宁
【作者单位】
【正文语种】中文
【相关文献】
1.飞思卡尔Kinetis微控制器支持开发更便携更智能的血糖仪--Dnurse糖护士手
机血糖仪让糖尿病人轻松检测、管理血糖 [J],
2.飞思卡尔Kinetis微控制器支持开发更为便携智能的血糖仪 [J], 飞思卡尔半导
体(中国)有限公司
3.飞思卡尔推出Kinetis KW2x无线MCU进一步扩展其MCU产品组合 [J], 周鑫
4.飞思卡尔扩大Kinetis微控制器在安全领域的领导地位 [J],
5.飞思卡尔Kinetis L系列微控制器现已大量供货全球能效最高的MCU,基于低功耗、低成本的飞思卡尔Freedom开发平台 [J],
因版权原因,仅展示原文概要,查看原文内容请购买。

飞思卡尔单片机中断(一)2024

飞思卡尔单片机中断(一)2024

飞思卡尔单片机中断(一)引言:飞思卡尔单片机中断是一种重要的编程技术,它允许在程序执行过程中暂停当前任务,响应外部事件或触发条件,并执行预定的中断服务程序。

本文将介绍飞思卡尔单片机中断的基本概念和使用方法。

正文:一、中断的基本概念1. 中断的定义和作用2. 中断向量表的概念和作用3. 中断优先级的设置方法4. 中断服务程序的编写规范5. 中断相关的特殊寄存器和标志位二、中断的种类和触发方式1. 内部中断和外部中断的区别2. 边沿触发和电平触发的区别3. 外部中断的触发源选择方法4. 外部中断的初始化配置5. 中断使能和禁止的控制方法三、中断的编程方法1. 中断源的初始化与配置2. 中断服务程序的编写和触发3. 中断嵌套和优先级的处理方法4. 保存和恢复现场的操作5. 中断的屏蔽和清除方法四、中断应用实例1. 外部中断的按键检测与响应2. 定时器中断的使用与定时任务处理3. 串口通信中断的接收和发送处理4. ADC采样中断的数据处理与转换5. PWM输出中断的周期控制和占空比调节五、中断的注意事项和常见问题1. 中断与任务之间的协作与竞争关系2. 中断响应时间和延迟的优化方法3. 中断嵌套引起的问题和解决方案4. 中断服务程序的限制和要求5. 中断与低功耗模式的关系和影响总结:飞思卡尔单片机中断是一种强大的编程技术,它可以提高单片机系统的实时性和响应能力。

通过本文的介绍,我们了解到了中断的基本概念和使用方法,以及中断在各种应用场景中的应用实例。

在使用中断时,我们需要注意一些常见问题和注意事项,以确保系统的稳定性和可靠性。

飞思卡尔单片机中断(两篇)

飞思卡尔单片机中断(两篇)

引言概述飞思卡尔单片机中断是指在特定的条件下,单片机的运行被打断,转而执行特定的处理程序。

在飞思卡尔单片机的开发中,中断是非常重要的一部分,它可以提高系统的响应速度和实时性。

本文将详细介绍飞思卡尔单片机中断的相关知识。

正文内容一、中断的基本概念和原理1. 中断的定义:中断是指在特定的条件下,程序的执行被打断,转而执行事先定义好的处理程序。

2. 中断的分类:外部中断和内部中断。

外部中断是由外部设备引发的,例如按键、定时器等;内部中断是由单片机内部的某个事件引发的,例如指令执行完成、通信完成等。

3. 中断的触发方式:电平触发和边沿触发。

电平触发是指当外部信号保持一定电平时触发中断;边沿触发是指在信号的上升沿或下降沿触发中断。

二、飞思卡尔单片机中断的使用方法1. 中断的初始化:对中断控制寄存器进行设置,使能相应的中断源。

2. 中断的优先级设置:多个中断源同时触发时,可以通过设置优先级来确定执行顺序。

3. 中断服务程序的编写:根据不同的中断源,编写相应的中断服务程序,完成特定的处理。

4. 中断的开启和关闭:根据需要,可以在程序中开启或关闭特定的中断。

三、飞思卡尔单片机中断优化技巧1. 中断嵌套:可以在一个中断中触发另一个中断,提高系统的实时性和处理效率。

2. 临界区保护:在关键代码段加入关中断代码,保护临界区避免竞态条件的发生。

3. 中断延时处理:在某些特定情况下,需要延时处理中断,可以使用延时函数或软件延时方式实现。

四、飞思卡尔单片机中断的常见问题和解决方法1. 中断误触发问题:可能是由于外部干扰、软件错误等原因导致中断被误触发,可以通过加入滤波电路、改进软件设计等方式解决。

2. 中断处理时间过长问题:中断处理程序执行时间过长会导致系统响应变慢,可以通过优化中断程序、减少中断次数等方式解决。

3. 中断嵌套问题:如果中断嵌套层次太多,可能会导致系统死锁或无法预测的结果,可以通过合理设计中断嵌套层次、减少中断嵌套次数来解决。

飞思卡尔中断处理方法

飞思卡尔中断处理方法

飞思卡尔智能车总结之中断的处理方法对于我这个学计算机软件的人,来写单片机的程序,还真的是由不少困难。

最近一直在看freescale的程序规范,真的是很纠结。

我全部的硬件编程经验不过是去年硬件小学期的vhdl 程序,在试验箱上捣鼓捣鼓程序逻辑,就这点。

本来就忘的差不多了,况且它与单片机的模式还有很多区别。

所以啊``忍之,忍之,全当自我挑战了。

机械部分和电路部分完成,接下来该做的软件调试和综合测试。

我得累了。

今天遇到了一个关于中断怎么写的问题,纠结了很久,总结一下:标准的程序段是这样的格式:[c-sharp]view plaincopyprint?1. #pragma CODE_SEG __NEAR_SEG NON_BANKED //中断函数置于非分页区内2. interrupt VectorNumber_Vtimch7 void ICU_Ch7Int(void)3. {4. TFLG1_C7F = 1; //清中断标志位5. }6. #pragma CODE_SEG DEFAULT //后续代码置于默认区域内一般是用上述方式声明中断函数。

由于飞思卡尔16位单片机的中断向量是16位,所以中断函数只有被置于非分页区内才能被寻址到,这就是第一行的作用。

第二行中“VectorNumber_Vtimch7”是中断号,它是由文件“MC9S12XS128.h”中定义的宏,这个中断号在它的技术手册中找到,但是我建议你采用这种宏的形式,因为这个宏不容易出错,可读性较高,比如“VectorNumber_Vtimch7”即为定时器(TIM)通道7(CH7)所对应的中断号。

中断函数名“ICU_Ch7Int”可任意取,没有影响。

由于单片机内部非分页区大小有限,非中断函数一般置于分页区内,最后一行即为此作用。

令:MC9S12XS128.h中的宏定义是这样的:[cpp]view plaincopyprint?1. /**************** interrupt vector numbers ****************/2. #define VectorNumber_Vsi 1193. #define VectorNumber_Vsyscall 1184. #define VectorNumber_VReserved118 1175. #define VectorNumber_VReserved117 1166. #define VectorNumber_VReserved116 1157. #define VectorNumber_VReserved115 1148. #define VectorNumber_VReserved114 1139. #define VectorNumber_VReserved113 11210. #define VectorNumber_VReserved112 11111. #define VectorNumber_VReserved111 11012. #define VectorNumber_VReserved110 10913. #define VectorNumber_VReserved109 10814. #define VectorNumber_VReserved108 10715. #define VectorNumber_VReserved107 10616. #define VectorNumber_VReserved106 10517. #define VectorNumber_VReserved105 10418. #define VectorNumber_VReserved104 10319. #define VectorNumber_VReserved103 10220. #define VectorNumber_VReserved102 10121. #define VectorNumber_VReserved101 10022. #define VectorNumber_VReserved100 9923. #define VectorNumber_VReserved99 9824. #define VectorNumber_VReserved98 9725. #define VectorNumber_Vatd0compare 9626. #define VectorNumber_VReserved96 9527. #define VectorNumber_VReserved95 9428. #define VectorNumber_VReserved94 9329. #define VectorNumber_VReserved93 9230. #define VectorNumber_VReserved92 9131. #define VectorNumber_VReserved91 9032. #define VectorNumber_VReserved90 8934. #define VectorNumber_VReserved88 8735. #define VectorNumber_VReserved87 8636. #define VectorNumber_VReserved86 8537. #define VectorNumber_VReserved85 8438. #define VectorNumber_VReserved84 8339. #define VectorNumber_VReserved83 8240. #define VectorNumber_VReserved82 8141. #define VectorNumber_VReserved81 8042. #define VectorNumber_VReserved79 7943. #define VectorNumber_VReserved78 7844. #define VectorNumber_VReserved77 7745. #define VectorNumber_VReserved76 7646. #define VectorNumber_VReserved75 7547. #define VectorNumber_VReserved74 7448. #define VectorNumber_VReserved73 7349. #define VectorNumber_VReserved72 7250. #define VectorNumber_VReserved71 7151. #define VectorNumber_VReserved70 7052. #define VectorNumber_Vpit3 6953. #define VectorNumber_Vpit2 6854. #define VectorNumber_Vpit1 6755. #define VectorNumber_Vpit0 6656. #define VectorNumber_Vhti 6557. #define VectorNumber_Vapi 6458. #define VectorNumber_Vlvi 6359. #define VectorNumber_VReserved62 6260. #define VectorNumber_VReserved61 6161. #define VectorNumber_VReserved60 6062. #define VectorNumber_VReserved59 5963. #define VectorNumber_VReserved58 5864. #define VectorNumber_Vpwmesdn 5765. #define VectorNumber_Vportp 5666. #define VectorNumber_VReserved55 5567. #define VectorNumber_VReserved54 5469. #define VectorNumber_VReserved52 5270. #define VectorNumber_VReserved51 5171. #define VectorNumber_VReserved50 5072. #define VectorNumber_VReserved49 4973. #define VectorNumber_VReserved48 4874. #define VectorNumber_VReserved47 4775. #define VectorNumber_VReserved46 4676. #define VectorNumber_VReserved45 4577. #define VectorNumber_VReserved44 4478. #define VectorNumber_VReserved43 4379. #define VectorNumber_VReserved42 4280. #define VectorNumber_VReserved41 4181. #define VectorNumber_VReserved40 4082. #define VectorNumber_Vcan0tx 3983. #define VectorNumber_Vcan0rx 3884. #define VectorNumber_Vcan0err 3785. #define VectorNumber_Vcan0wkup 3686. #define VectorNumber_Vflash 3587. #define VectorNumber_Vflashfd 3488. #define VectorNumber_VReserved33 3389. #define VectorNumber_VReserved32 3290. #define VectorNumber_VReserved31 3191. #define VectorNumber_VReserved30 3092. #define VectorNumber_Vcrgscm 2993. #define VectorNumber_Vcrgplllck 2894. #define VectorNumber_VReserved27 2795. #define VectorNumber_VReserved26 2696. #define VectorNumber_Vporth 2597. #define VectorNumber_Vportj 2498. #define VectorNumber_VReserved23 2399. #define VectorNumber_Vatd0 22 100. #define VectorNumber_Vsci1 21 101. #define VectorNumber_Vsci0 20 102. #define VectorNumber_Vspi0 19103. #define VectorNumber_Vtimpaie 18104. #define VectorNumber_Vtimpaaovf 17105. #define VectorNumber_Vtimovf 16106. #define VectorNumber_Vtimch7 15107. #define VectorNumber_Vtimch6 14108. #define VectorNumber_Vtimch5 13109. #define VectorNumber_Vtimch4 12110. #define VectorNumber_Vtimch3 11111. #define VectorNumber_Vtimch2 10112. #define VectorNumber_Vtimch1 9113. #define VectorNumber_Vtimch0 8114. #define VectorNumber_Vrti 7115. #define VectorNumber_Virq 6116. #define VectorNumber_Vxirq 5117. #define VectorNumber_Vswi 4118. #define VectorNumber_Vtrap 3119. #define VectorNumber_Vcop 2120. #define VectorNumber_Vclkmon 1121. #define VectorNumber_Vreset 0122.123. /**************** interrupt vector table ****************/ 124. #define Vsi 0x0000FF10125. #define Vsyscall 0x0000FF12126. #define VReserved118 0x0000FF14 127. #define VReserved117 0x0000FF16 128. #define VReserved116 0x0000FF18 129. #define VReserved115 0x0000FF1A 130. #define VReserved114 0x0000FF1C 131. #define VReserved113 0x0000FF1E 132. #define VReserved112 0x0000FF20 133. #define VReserved111 0x0000FF22 134. #define VReserved110 0x0000FF24 135. #define VReserved109 0x0000FF26 136. #define VReserved108 0x0000FF28 137. #define VReserved107 0x0000FF2A139. #define VReserved105 0x0000FF2E 140. #define VReserved104 0x0000FF30 141. #define VReserved103 0x0000FF32 142. #define VReserved102 0x0000FF34 143. #define VReserved101 0x0000FF36 144. #define VReserved100 0x0000FF38 145. #define VReserved99 0x0000FF3A 146. #define VReserved98 0x0000FF3C 147. #define Vatd0compare 0x0000FF3E 148. #define VReserved96 0x0000FF40 149. #define VReserved95 0x0000FF42 150. #define VReserved94 0x0000FF44 151. #define VReserved93 0x0000FF46 152. #define VReserved92 0x0000FF48 153. #define VReserved91 0x0000FF4A 154. #define VReserved90 0x0000FF4C 155. #define VReserved89 0x0000FF4E 156. #define VReserved88 0x0000FF50 157. #define VReserved87 0x0000FF52 158. #define VReserved86 0x0000FF54 159. #define VReserved85 0x0000FF56 160. #define VReserved84 0x0000FF58 161. #define VReserved83 0x0000FF5A 162. #define VReserved82 0x0000FF5C 163. #define VReserved81 0x0000FF5E 164. #define VReserved79 0x0000FF60 165. #define VReserved78 0x0000FF62 166. #define VReserved77 0x0000FF64 167. #define VReserved76 0x0000FF66 168. #define VReserved75 0x0000FF68 169. #define VReserved74 0x0000FF6A 170. #define VReserved73 0x0000FF6C 171. #define VReserved72 0x0000FF6E 172. #define VReserved71 0x0000FF70174. #define Vpit3 0x0000FF74 175. #define Vpit2 0x0000FF76 176. #define Vpit1 0x0000FF78 177. #define Vpit0 0x0000FF7A 178. #define Vhti 0x0000FF7C 179. #define Vapi 0x0000FF7E 180. #define Vlvi 0x0000FF80 181. #define VReserved62 0x0000FF82 182. #define VReserved61 0x0000FF84 183. #define VReserved60 0x0000FF86 184. #define VReserved59 0x0000FF88 185. #define VReserved58 0x0000FF8A 186. #define Vpwmesdn 0x0000FF8C 187. #define Vportp 0x0000FF8E 188. #define VReserved55 0x0000FF90 189. #define VReserved54 0x0000FF92 190. #define VReserved53 0x0000FF94 191. #define VReserved52 0x0000FF96 192. #define VReserved51 0x0000FF98 193. #define VReserved50 0x0000FF9A 194. #define VReserved49 0x0000FF9C 195. #define VReserved48 0x0000FF9E 196. #define VReserved47 0x0000FFA0 197. #define VReserved46 0x0000FFA2 198. #define VReserved45 0x0000FFA4 199. #define VReserved44 0x0000FFA6 200. #define VReserved43 0x0000FFA8 201. #define VReserved42 0x0000FFAA 202. #define VReserved41 0x0000FFAC 203. #define VReserved40 0x0000FFAE 204. #define Vcan0tx 0x0000FFB0 205. #define Vcan0rx 0x0000FFB2 206. #define Vcan0err 0x0000FFB4 207. #define Vcan0wkup 0x0000FFB6209. #define Vflashfd 0x0000FFBA 210. #define VReserved33 0x0000FFBC 211. #define VReserved32 0x0000FFBE 212. #define VReserved31 0x0000FFC0 213. #define VReserved30 0x0000FFC2 214. #define Vcrgscm 0x0000FFC4 215. #define Vcrgplllck 0x0000FFC6 216. #define VReserved27 0x0000FFC8 217. #define VReserved26 0x0000FFCA 218. #define Vporth 0x0000FFCC 219. #define Vportj 0x0000FFCE 220. #define VReserved23 0x0000FFD0 221. #define Vatd0 0x0000FFD2 222. #define Vsci1 0x0000FFD4 223. #define Vsci0 0x0000FFD6 224. #define Vspi0 0x0000FFD8 225. #define Vtimpaie 0x0000FFDA 226. #define Vtimpaaovf 0x0000FFDC 227. #define Vtimovf 0x0000FFDE 228. #define Vtimch7 0x0000FFE0 229. #define Vtimch6 0x0000FFE2 230. #define Vtimch5 0x0000FFE4 231. #define Vtimch4 0x0000FFE6 232. #define Vtimch3 0x0000FFE8 233. #define Vtimch2 0x0000FFEA 234. #define Vtimch1 0x0000FFEC 235. #define Vtimch0 0x0000FFEE 236. #define Vrti 0x0000FFF0 237. #define Virq 0x0000FFF2 238. #define Vxirq 0x0000FFF4 239. #define Vswi 0x0000FFF6 240. #define Vtrap 0x0000FFF8 241. #define Vcop 0x0000FFFA 242. #define Vclkmon 0x0000FFFC。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

S12的输入/输入端口(I/O口)I/O端口功能可设置为通用I/O口、驱动、内部上拉/下拉、中断输入等功能。

设置I/O口工作方式的寄存器有:DDR、IO、RDR、PE、IE和PS。

DDR:设定I/O口的数据方向。

IO :设定输出电平的高低。

RDR:选择I/O口的驱动能力。

PE:选择上拉/下拉。

IE:允许或禁止端口中断。

PS:1、中断允许位置位时,选择上升沿/下降沿触发中断;2、中断禁止时且PE有效时,用于选择上拉还是下拉。

I/O端口设置1、A口、B口、E口寄存器(1)数据方向寄存器DDRA、DDRB、DDREDDRA、DDRB、DDRE均为8位寄存器,复位后其值均为0。

当DDRA=0、DDRB=0、DDRE=0 时A口、B口和E口均为输入口。

否则,A口、B口、E口为输出口。

当DDRA、DDRB、DDRE的任何一位置1时,则该位对应的引脚被设置为输出。

例如,将A口设置为输出口,则其C语言程序的语句为:DDRA=0xff;(2)A口、B口、E口上拉控制寄存器PUCRPUCR为8位寄存器,复位后的值为0。

当PUPAE、PUPBE、PUPEE被设置为1时,A口、B口、E口具有内部上拉功能;为0时,上拉无效。

当A口、B口、E口为地址/数据总线时,PUPAE和PUPBE无效。

(3)A口、B口、E口降功率驱动控制寄存器RDRIVRDRIV为8位寄存器,复位后的值为0,此时,A口、B口、E口驱动保持全功率;当RDPA、RDPB、RDPE为1时,A口、B口、E口输出引脚的驱动功率下降(4)数据寄存器PORTA、PORTB、PORTEPORTA、PORTB、PORTE均为8位寄存器,复位后的值为0,端口引脚输出低电平;要使引脚输出高电平,相应端口对应位应该置1。

由于PE0是/XIRQ、PE1是IRQ,因此,PE0和PE1只能设置为输入。

2、H口寄存器(1)H口I/O寄存器PTH任意时间读/写。

当某一引脚对就的数据方向位设置为1时,读操作返回的是这个端口寄存器的值;否则,读的是引脚的值。

(2)端口H输入寄存器PTIH只可读,不可写。

读该寄存器返回的是引脚状态。

该寄存器可检测相应引脚的输出是否过载或短路。

(3)数据方向寄存器DDRH(4)端口H降功率驱动寄存器RDRH(5)端口H拉动装置使能寄存器PERH任意时间读/写。

如果端口H是输入口,该寄存器将配置被激活的上拉或下拉装置。

当PERH某一位为1时,对应装备上拉或下拉使能。

当PERH某一位为0时,对应装备上拉或下拉禁止。

(6)端口H极性选择寄存器PPSH任意时间读/写。

该寄存器有两个作用:选择激活的中断边沿的极性;选择上拉或下拉。

当PPSH某一位为1时,H口对应引脚信号上升沿将使PIFH寄存器中相应位置位;当PERH对应位置1且端口定义为输入口时,引脚和下拉装置连接。

当PPSH某一位为0时,H口对应引脚信号下降沿将使PIFH寄存器中相应位置位;当PERH对应位置1且端口定义为输入口时,引脚和上拉装置连接。

(7)H口中断使能寄存器PIEH任意时间读/写。

PIEH寄存器可设置端口H相应引脚的外部中断边沿使能或禁止。

PIEH某一位置1时,对应引脚的中断使能。

PIEH某一位置0时,对应引脚的中断禁止。

(8)口中断标志寄存器PIFH任意时间读/写。

当对应引脚出现活动的边沿时,PIFH相应位被置1。

是上升沿或下降沿,由PPSH寄存器相应位的状态决定。

为了清除标志位,向PIFH对应位写“1”。

写“0”无效。

3、J口寄存器(1)J口I/O寄存器PTJ任意时间读/写。

当数据方向寄存器对应位置1时,读PTJ将返回PTJ中的值;否则读返回对应引脚的值。

(2)J口输入寄存器PTIJ只读不写。

读该寄存器将返回引脚的值。

该寄存器可检测相应引脚的输出是否过载或短路。

(3)J口数据方向寄存器DDRJ(4)J口降功率驱动寄存器RDRJ(5)J口拉动装备使能寄存器PERJ(6)J口极性选择寄存器PPSJ任意时间读/写。

该寄存器有两个作用:选择激活的中断边沿的极性;选择上拉或下拉。

当PPSJ某一位为1时,J口对应引脚信号上升沿将使PIFJ寄存器中相应位置位;当PERJ对应位置1且端口定义为输入口时,引脚和下拉装置连接。

当PPSJ某一位为0时,J口对应引脚信号下降沿将使PIFJ寄存器中相应位置位;当PERJ对应位置1且端口定义为输入口时,引脚和上拉装置连接。

(7)J口中断使能寄存器PIEJ任意时间读/写。

PIEJ寄存器可设置端口J相应引脚的外部中断边沿使能或禁止。

PIEJ某一位置1时,对应引脚的中断使能。

PIEJ某一位置0时,对应引脚的中断禁止.(8)J口中断标志寄存器PIFJ任意时间读/写。

当对应引脚出现活动的边沿时,PIFJ相应位被置1。

是上升沿或下降沿,由PPSJ寄存器相应位的状态决定。

为了清除标志位,向PIFJ对应位写“1”。

写“0”无效。

4、M口寄存器(1)M口I/O寄存器PTM任意时间读/写。

当数据方向寄存器对应位置1时,读PTM将返回PTM中的值;否则读PTM将返回对应引脚的值。

(2)M口输入寄存器PTIM只读不写。

读该寄存器将返回引脚的值。

该寄存器可检测相应引脚的输出是否过载或短路。

(3)M口数据方向寄存器DDRMByteflight/CAN/BDLC强制将与其输出对应的引脚置为输出状态;同时,将与其输入对应的引脚置为输入状态。

(4)M口降功率驱动寄存器RDRM(5)M口拉动装备使能寄存器PERM任意时间读/写。

如果端口用于输入或“线或”输出,该寄存器配置被激活的上拉或下拉装置。

当端口用于推挽输出时,相应位无效。

(6)M口极性选择寄存器PPSM任意时间读/写。

当PPSM的某一位被置为1时,如果PERM对应位使能,并且端口用于通用或BDLC输入,则一个下拉装备被连接到M口对应引脚上。

当PPSM的某一位被清0时,如果PERM对应位使能,并且端口用于通用、Byteflight或RXCAN输入,则一个上拉装备被连接到M口对应引脚上。

(7)M口线或模式寄存器WOMM该寄存器配置输出引脚为线或。

如果应用于Byteflight、CAN和BDLC 输出且许多几种串行模式的多点连接,则该寄存器的某一位对于用于输入的相应引脚无影响。

当WOMM某一位置为1时,输出缓冲器工作在开漏输出状态。

当WOMM某一位清为0时,输出缓冲器工作在推挽输出状态。

5、P口寄存器(1)P口I/O寄存器PTP任意时间读/写。

如果PWM通道使能,则PWM功能优先于通用I/O功能。

如果相应通道使能,通道6~0只能输出;如果停机特性使能,则通道7可作为PWM输出与输入。

SPI功能也优先于通用I/O功能。

(2)P口输入寄存器PTIP(3)P口数据方向寄存器DDRP如果PWM对应通道或SPI模式使能,则该寄存器对引脚无效。

(4)P口降功率驱动寄存器RDRP(5)P口拉动装置使能寄存器PERP(6)P口极性选择寄存器PPSP任意时间读/写。

该寄存器有两个作用:选择激活的中断边沿的极性;选择上拉或下拉。

当PPSP某一位为1时,P口对应引脚信号上升沿将使PIFP寄存器中相应位置位;当PERP对应位置1且端口定义为输入口时,引脚和下拉装置连接。

当PPSP某一位为0时,P口对应引脚信号下降沿将使PIFP寄存器中相应位置位;当PERP对应位置1且端口定义为输入口时,引脚和上拉装置连接。

(7)P口中断使能寄存器PIEP任意时间读/写。

PIEP寄存器可设置端口P相应引脚的外部中断边沿使能或禁止。

PIEP某一位置1时,对应引脚的中断使能。

PIEP某一位置0时,对应引脚的中断禁止。

(8)P口中断标志寄存器PIFP任意时间读/写。

当对应引脚出现活动的边沿时,PIFP相应位被置1。

是上升沿或下降沿,由PPSP寄存器相应位的状态决定。

为了清除标志位,向PIFP对应位写“1”。

写“0”无效。

6、S口寄存器(1)S口I/O寄存器PTS(2)S口输入寄存器PTIP(3)S口数据方向寄存器DDRS(4)S口降功率驱动寄存器RDRS(5)S口拉动装置使能寄存器PERS(6)S口极性选择寄存器PPSS任意时间读/写。

该寄存器有两个作用:选择激活的中断边沿的极性;选择上拉或下拉。

当PPSP某一位为,PERP对应位置1且端口定义为输入口时,引脚和下拉装置连接。

当PPSP某一位为0,PERP对应位置1且端口定义为线或输出口时,引脚和上拉装置连接。

(7)S口线或模式寄存器WOMS该寄存器配置输出引脚为线或。

如果应用于SPI和SCI输出且许多几种串行模式的多点连接,则该寄存器的某一位对于用于输入的相应引脚无影响。

当WOMM某一位置为1时,输出缓冲器工作在开漏输出状态。

当WOMM某一位清为0时,输出缓冲器工作在推挽输出状态。

S12微控制器中断模块中断源:中断请求信号的来源。

S12微控制器的中断源:特殊中断源、外部中断源、端口中断源、定时中断源、通信中断源、A/D中断源等。

中断过程①外部或内部中断源提出中断请求,如果存在中断标志位,则硬件置相应中断标志位。

②如果开放了CPU对相应中断源的中断请求的响应,CPU将暂停当前程序段的执行,I清0,即关中断,将断点地址与相关寄存器的值压入堆栈保护起来。

③跳转到中断入口地址执行指令,进而执行中断服务程序。

中断服务程序中清标志位。

④将压入堆栈的数据放回相关寄存器,断点地址放回PC。

⑤返回暂停的程序段继续执行。

1、不可屏蔽中断XIRQ中断入口地址:$fff4、$fff5。

C语言中断号:5。

(1)中断允许位X将CCR中的X位清0,就开放了CPU对XIRQ中断请求的响应。

C语言程序中,使用如下指令可开放XIRQ的中断:ASM LDAA #$10;ASM TAP;(2)中断请求信号低电平有效。

(3)实验①实验要求在main()中顺序点亮8支发光管,每次点亮1支。

在XIRQ的中断服务程序中反向点亮8支发光管,每次点亮2支。

②电路连接发光管由A口驱动;将E口与B口连接,由PB0为XIRQ提供中断请求信号。

2、可屏蔽中断IRQ中断入口地址:$fff2、$fff3。

C语言中断号:6。

(1)中断允许总控制位I将CCR中的I位清0,就开放了CPU对可屏蔽中断源的中断请求的响应。

(2)IRQ控制寄存器IRQCR程序中,IRQCR使用符号INTCR代替。

①IRQ中断触发方式选择位IRQE当IRQE=1时,IRQ引脚下降沿触发中断。

当IRQE=0时,IRQ引脚低电平沿触发中断。

②IRQ中断允许控制位IRQEN当IRQEN=1时,IRQ引脚与中断逻辑连接,IRQ中断允许。

当IRQEN=0时,IRQ引脚与中断逻辑断开,IRQ中断禁止。

(3)实验①实验要求在main()中顺序点亮8支发光管,每次点亮1支。

在IRQ的中断服务程序中反向点亮8支发光管,每次点亮2支。

相关文档
最新文档