STM32f103寄存器说明

STM32f103寄存器说明
STM32f103寄存器说明

CRC寄存器

(一种算法,用以确认发送过程中是否出错)数据寄存器:CRC_DR

可读写,复位值:0xFFFF FFFF;

独立数据寄存器:CRC_IDR

临时存放任何8位数据;

控制寄存器:CRC_CR

只零位可用,用于复位CRC,对其写1复位,由硬件清零;

PWR电源控制(控制和管理电源)

电源控制寄存器:PWR_CR

控制选择系统的电源

电源控制/状态寄存器:PWR_CSR

睡眠或待机模式电源控制

BKP备份寄存器(用以控制和管理备份数据)

备份数据寄存器x:BKP_DRx (x = 1 … 10) 10个16位数据寄存器用以存储用户数据

RTC时钟校准寄存器:BKP_RTCCR

控制实时时钟的运行

备份控制寄存器:BKP_CR

控制选择清除备份数据的类型

备份控制/状态寄存器:BKP_CSR

对侵入事件的控制

RCC寄存器(时钟的选择、复位、分频)

时钟控制寄存器(RCC_CR)

各时钟状态显示

时钟配置寄存器(RCC_CFGR)

时钟分频

时钟中断寄存器(RCC_CIR)

控制就绪中断使能与否

APB2外设复位寄存器(RCC_APB2RSTR) APB1外设复位寄存器(RCC_APB1RSTR) 复位APB各功能寄存器

AHB外设时钟使能寄存器(RCC_AHBENR) AHB时钟使能控制

APB2外设时钟使能寄存器(RCC_APB2ENR) APB1外设时钟使能寄存器(RCC_APB1ENR) APB1时钟使能控制

备份域控制寄存器(RCC_BDCR)

备份域时钟控制

控制/状态寄存器(RCC_CSR)

复位标志寄存器

AHB外设时钟复位寄存器(RCC_AHBRSTR) 复位以太网MAC模块

时钟配置寄存器2(RCC_CFGR2)

时钟选择与分频

GPIO寄存器

(设置端口的功能)

端口配置低寄存器(GPIOx_CRL) (x=A..E)

端口配置高寄存器(GPIOx_CRH) (x=A..E)

端口输入数据寄存器(GPIOx_IDR) (x=A..E)

只读数据,读出IO口的状态

端口输出数据寄存器(GPIOx_ODR) (x=A..E) 可读可写

端口位设置/清除寄存器(GPIOx_BSRR) (x=A..E)

端口位清除寄存器(GPIOx_BRR) (x=A..E)

将某一端口清零

端口配置锁定寄存器(GPIOx_LCKR) (x=A..E) 用于保护端口配值

AFIO寄存器

(将端口重映射到其它端口用以端口的第二功能)事件控制寄存器(AFIO_EVCR)

选择时间输出端口与引脚

复用重映射和调试I/O配置寄存器(AFIO_MAPR) 各寄存器功能引脚重映射选择

外部中断配置寄存器1(AFIO_EXTICR1)

外部中断配置寄存器2(AFIO_EXTICR2)

外部中断配置寄存器3(AFIO_EXTICR3) 外部中断配置寄存器4(AFIO_EXTICR4) 外部中断引脚重映射选择

EXTI 寄存器(外部中断控制器)

中断屏蔽寄存器(EXTI_IMR)

用于屏蔽或开放某一引脚的中断请求

事件屏蔽寄存器(EXTI_EMR)

用于屏蔽或开放某一引脚的事件

上升沿触发选择寄存器(EXTI_RTSR) 禁止或允许某一引脚的上升沿触发

下降沿触发选择寄存器(EXTI_FTSR) 禁止或允许某一引脚的下降沿触发

软件中断事件寄存器(EXTI_SWIER) 控制某引脚的软件中断

挂起寄存器(EXTI_PR)

显示某线的引脚有无触发请求

DMA寄存器(脱离cpu的传输模式)

DMA中断状态寄存器(DMA_ISR)

中断情况标志器

DMA中断标志清除寄存器(DMA_IFCR) 手动清除标志位

DMA通道x配置寄存器(DMA_CCRx)(x = 1…7)传输控制寄存器

DMA通道x传输数量寄存器(DMA_CNDTRx)(x = 1…7)数据传输剩余数量存储器

DMA通道x外设地址寄存器(DMA_CPARx)(x = 1…7)设置数据传输外设源或目标地址

DMA通道x存储器地址寄存器(DMA_CMARx)(x = 1…7)设置存储器地址

ADC寄存器

(模数转换器)

ADC状态寄存器(ADC_SR)

AD转换标志寄存器

ADC控制寄存器1(ADC_CR1)

ADC控制寄存器2(ADC_CR2)

设置AD转换的各种功能

ADC采样时间寄存器1(ADC_SMPR1)

ADC采样时间寄存器2(ADC_SMPR2)

某通道选择固定的采样时间

ADC注入通道数据偏移寄存器x (ADC_JOFRx)(x=1..4) 设置数据偏移量

ADC看门狗高阀值寄存器(ADC_HTR)

设置模拟看门狗的阀值高限

ADC看门狗低阀值寄存器(ADC_LRT)

设置模拟看门狗的阀值低限

ADC规则序列寄存器1(ADC_SQR1)

ADC规则序列寄存器2(ADC_SQR2)

ADC规则序列寄存器3(ADC_SQR3)

设置ADC顺序

ADC注入序列寄存器(ADC_JSQR)

ADC 注入数据寄存器x (ADC_JDRx) (x= 1..4)

ADC数据结果寄存器

ADC规则数据寄存器(ADC_DR)

DAC寄存器

(数模转换器)

DAC控制寄存器(DAC_CR)

DAC软件触发寄存器(DAC_SWTRIGR)

DAC通道1的12位右对齐数据保持寄存器(DAC_DHR12R1) DAC通道1的12位左对齐数据保持寄存器(DAC_DHR12L1) DAC通道1的8位右对齐数据保持寄存器(DAC_DHR8R1) DAC通道2的12位右对齐数据保持寄存器(DAC_DHR12R2) DAC通道2的12位左对齐数据保持寄存器(DAC_DHR12L2) DAC通道2的8位右对齐数据保持寄存器(DAC_DHR8R2)双DAC的12位右对齐数据保持寄存器(DAC_DHR12RD)

双DAC的12位左对齐数据保持寄存器(DAC_DHR12LD)

双DAC的8位右对齐数据保持寄存器(DAC_DHR8RD) DAC通道1数据输出寄存器(DAC_DOR1)

DAC通道2数据输出寄存器(DAC_DOR2)

TIM1和TIM8寄存器

(高级的定时计数寄存器)

TIM1和TIM8控制寄存器1(TIMx_CR1)

TIM1和TIM8控制寄存器2(TIMx_CR2)

TIM1和TIM8从模式控制寄存器(TIMx_SMCR)

TIM1和TIM8 DMA/中断使能寄存器(TIMx_DIER) TIM1和TIM8状态寄存器(TIMx_SR)

TIM1和TIM8事件产生寄存器(TIMx_EGR)

TIM1和TIM8捕获/比较模式寄存器1(TIMx_CCMR1) TIM1和TIM8捕获/比较模式寄存器2(TIMx_CCMR2) TIM1和TIM8捕获/比较使能寄存器(TIMx_CCER) TIM1和TIM8计数器(TIMx_CNT)

TIM1和TIM8预分频器(TIMx_PSC)

TIM1和TIM8自动重装载寄存器(TIMx_ARR)

TIM1和TIM8重复计数寄存器(TIMx_RCR)

TIM1和TIM8捕获/比较寄存器1(TIMx_CCR1)

TIM1和TIM8捕获/比较寄存器2(TIMx_CCR2)

TIM1和TIM8捕获/比较寄存器3(TIMx_CCR3)

TIM1和TIM8捕获/比较寄存器(TIMx_CCR4)

TIM1和TIM8刹车和死区寄存器(TIMx_BDTR)

TIM1和TIM8 DMA控制寄存器(TIMx_DCR)

TIM1和TIM8连续模式的DMA地址(TIMx_DMAR)

TIMx寄存器

(控制定时器)

控制寄存器1(TIMx_CR1)

控制寄存器2(TIMx_CR2)

从模式控制寄存器(TIMx_SMCR)

DMA/中断使能寄存器(TIMx_DIER)

状态寄存器(TIMx_SR)

事件产生寄存器(TIMx_EGR)

捕获/比较模式寄存器1(TIMx_CCMR1)

捕获/比较模式寄存器2(TIMx_CCMR2)

捕获/比较使能寄存器(TIMx_CCER)

计数器(TIMx_CNT)

预分频器(TIMx_PSC)

自动重装载寄存器(TIMx_ARR)

捕获/比较寄存器1(TIMx_CCR1)

捕获/比较寄存器2(TIMx_CCR2)

捕获/比较寄存器3(TIMx_CCR3)

捕获/比较寄存器4(TIMx_CCR4)

DMA控制寄存器(TIMx_DCR)

连续模式的DMA地址(TIMx_DMAR)

TIM6和TIM7寄存器

(基本定时计数器)

TIM6和TIM7控制寄存器1(TIMx_CR1)

TIM6和TIM7控制寄存器2(TIMx_CR2)

TIM6和TIM7 DMA/中断使能寄存器(TIMx_DIER)

TIM6和TIM7状态寄存器(TIMx_SR)

TIM6和TIM7事件产生寄存器(TIMx_EGR)

TIM6和TIM7计数器(TIMx_CNT)

TIM6和TIM7预分频器(TIMx_PSC)

TIM6和TIM7自动重装载寄存器(TIMx_ARR)

RTC寄存器

(实时时钟)

RTC控制寄存器高位(RTC_CRH)

RTC控制寄存器低位(RTC_CRL)

16.4.3 RTC预分频装载寄存器(RTC_PRLH/RTC_PRLL) 16.4.4 RTC预分频器余数寄存器(RTC_DIVH / RTC_DIVL)

RTC计数器寄存器(RTC_CNTH / RTC_CNTL) 16.4.6 RTC闹钟寄存器(RTC_ALRH/RTC_ALRL)

IWDG寄存器

(独立看门狗,用以监督系统硬件的正常运行)键寄存器(IWDG_KR)

预分频寄存器(IWDG_PR)

重装载寄存器(IWDG_RLR)

状态寄存器(IWDG_SR)

窗口看门狗(WWDG)寄存器(用以监督软件的正常运行)

控制寄存器(WWDG_CR)

配置寄存器(WWDG_CFR)

状态寄存器(WWDG_SR)

FSMC寄存器

(可变静态存储控制器)

NOR闪存和PSRAM控制器寄存器

SRAM/NOR闪存片选控制寄存器1…4 (FSMC_BCR1…4)

SRAM/NOR闪存片选时序寄存器1…4 (FSMC_BTR1…4) SRAM/NOR闪存写时序寄存器1…4 (FSMC_BWTR1…4)

NAND闪存和PC卡控制器寄存器

PC卡/NAND闪存控制寄存器2..4 (FSMC_PCR2..4) FIFO状态和中断寄存器2..4 (FSMC_SR2..4)

通用存储空间时序寄存器 2..4 (FSMC_PMEM2..4)

属性存储空间时序寄存器 2..4 (FSMC_PATT2..4)

I/O空间时序寄存器4 (FSMC_PIO4)

ECC结果寄存器2/3 (FSMC_ECCR2/3)

SDIO寄存器(数据传输控制器)

SDIO电源控制寄存器(SDIO_POWER) SDIO时钟控制寄存器(SDIO_CLKCR) SDIO参数寄存器(SDIO_ARG)

SDIO命令寄存器(SDIO_CMD)

SDIO命令响应寄存器(SDIO_RESPCMD) SDIO响应1..4寄存器(SDIO_RESPx) SDIO数据定时器寄存器(SDIO_DTIMER) SDIO数据长度寄存器(SDIO_DLEN)

SDIO数据控制寄存器(SDIO_DCTRL SDIO数据计数器寄存器(SDIO_DCOUNT) SDIO状态寄存器(SDIO_STA)

SDIO清除中断寄存器(SDIO_ICR)

SDIO中断屏蔽寄存器(SDIO_MASK)

SDIO FIFO计数器寄存器(SDIO_FIFOCNT) SDIO数据FIFO寄存器(SDIO_FIFO)

USB寄存器(usb传输控制器)

通用寄存器

USB控制寄存器(USB_CNTR)

USB中断状态寄存器(USB_ISTR)

USB帧编号寄存器(USB_FNR)

USB设备地址寄存器(USB_DADDR)

USB分组缓冲区描述表地址寄存器(USB_BTABLE)

端点寄存器

USB 端点n寄存器(USB_EPnR), n=[0..7]

缓冲区寄存器

发送缓冲区地址寄存器n(USB_ADDRn_TX)

发送数据字节数寄存器n(USB_COUNTn_TX)

接收缓冲区地址寄存器n(USB_ADDRn_RX)

接收数据字节数寄存器n(USB_COUNTn_RX)

CAN 寄存器(邮箱控制寄存器)

CAN控制和状态寄存器

CAN主控制寄存器(CAN_MCR)

CAN主状态寄存器(CAN_MSR)

CAN发送状态寄存器(CAN_TSR)

CAN接收FIFO 0寄存器(CAN_RF0R)

CAN接收FIFO 1寄存器(CAN_RF1R)

CAN中断使能寄存器(CAN_IER)

CAN错误状态寄存器(CAN_ESR)

CAN位时序寄存器(CAN_BTR)

CAN邮箱寄存器

发送邮箱标识符寄存器(CAN_TIxR) (x=0..2)

发送邮箱数据长度和时间戳寄存器(CAN_TDTxR) (x=0..2)

发送邮箱低字节数据寄存器(CAN_TDLxR) (x=0..2)

发送邮箱高字节数据寄存器(CAN_TDHxR) (x=0..2)

接收FIFO邮箱标识符寄存器(CAN_RIxR) (x=0..1)

接收FIFO邮箱数据长度和时间戳寄存器(CAN_RDTxR) (x=0..1)

接收FIFO邮箱低字节数据寄存器(CAN_RDLxR) (x=0..1)

接收FIFO邮箱高字节数据寄存器(CAN_RDHxR) (x=0..1)

CAN过滤器寄存器

CAN 过滤器主控寄存器(CAN_FMR)

CAN 过滤器模式寄存器(CAN_FM1R)

CAN 过滤器位宽寄存器(CAN_FS1R)

CAN 过滤器FIFO关联寄存器(CAN_FFA1R)

CAN 过滤器激活寄存器(CAN_FA1R)

CAN 过滤器组i的寄存器x (CAN_FiRx) (互联产品中i=0..27,其它产品中i=0..13;x=1..2)

SPI和I2S寄存器

(串行外设接口控制器)

SPI控制寄存器1(SPI_CR1)

SPI控制寄存器2(SPI_CR2)

SPI 状态寄存器(SPI_SR)

SPI 数据寄存器(SPI_DR)

SPI CRC多项式寄存器(SPI_CRCPR)

SPI Rx CRC寄存器(SPI_RXCRCR)

SPI Tx CRC寄存器(SPI_TXCRCR)

SPI_I2S配置寄存器(SPI_I2S_CFGR)

SPI_I2S预分频寄存器(SPI_I2SPR)

I2C寄存器(数据传输寄存器)

控制寄存器1(I2C_CR1)

控制寄存器2(I2C_CR2)

自身地址寄存器1(I2C_OAR1)

自身地址寄存器2(I2C_OAR2)

数据寄存器(I2C_DR)

状态寄存器1(I2C_SR1)

状态寄存器2 (I2C_SR2)

时钟控制寄存器(I2C_CCR)

TRISE寄存器(I2C_TRISE)

USART寄存器(通用同步异步收发器)

状态寄存器(USART_SR)

数据寄存器(USART_DR)

波特比率寄存器(USART_BRR)

控制寄存器1(USART_CR1)

控制寄存器2(USART_CR2)

控制寄存器3(USART_CR3)

保护时间和预分频寄存器(USART_GTPR)

OTG_FS控制和状态寄存器

(数据传输控制器)

OTG_FS全局寄存器

OTG_FS控制和状态寄存器(OTG_FS_GOTGCTL)

OTG_FS中断寄存器(OTG_FS_GOTGINT)

OTG_FS AHB配置寄存器(OTG_FS_GAHBCFG)

OTG_FS_USB配置寄存器(OTG_FS_GUSBCFG)

OTG_FS复位寄存器(OTG_FS_GRSTCTL)

OTG_FS控制器中断寄存器(OTG_FS_GINTSTS)

OTG_FS中断屏蔽寄存器(OTG_FS_GINTMSK)

OTG_FS接收状态调试读/OTG状态读和POP寄存器(OTG_FS_GRXSTSR / OTG_FS_GRXSTSP)

OTG_FS接收FIFO长度寄存器(OTG_FS_GRXFSIZ)

OTG_FS非周期性TX FIFO长度寄存器(OTG_FS_GNPTXFSIZ)

OTG_FS非周期性TX FIFO/请求队列状态寄存器(OTG_FS_GNPTXSTS)

OTG_FS通用控制器配置寄存器(OTG_FS_GCCFG)

OTG_FS控制器ID寄存器(OTG_FS_CID)

OTG_FS主机周期性发送FIFO长度寄存器(OTG_FS_HPTXFSIZ)

OTG_FS设备IN端点发送FIFO长度寄存器(OTG_FS_DIEPTXFx)(其中x是FIFO的编号,x=1…4)

主机模式下的寄存器

OTG_FS主机模式配置寄存器(OTG_FS_HCFG)

OTG_FS主机帧间隔寄存器(OTG_FS_HFIR)

OTG_FS主机帧号/帧时间剩余寄存器(OTG_FS_HFNUM)

OTG_FS主机周期性发送FIFO/请求队列寄存器(OTG_FS_HPTXSTS)

OTG_FS主机所有通道中断寄存器(OTG_FS_HAINT)

OTG_FS主机所有通道中断屏蔽寄存器(OTG_FS_HAINTMSK)

OTG_FS主机端口控制和状态寄存器(OTG_FS_HPRT)

OTG_FS主机通道x特性寄存器(OTG_FS_HCCHARx)(此处x代码通道号,x = 0...7)

OTG_FS主机通道x中断寄存器(OTG_FS_HCINTx)(其中x代表通道号,x=0...7,)

OTG_FS主机通道x中断屏蔽寄存器(OTG_FS_HCINTMSKx)(其中x为通道号,x=0...7) OTG_FS主机通道x传输长度寄存器(OTG_FS_HCTSIZx)(其中x为通道号,x=0...7)

设备模式下的寄存器

OTG_FS设备配置寄存器(OTG_FS_DCFG)

OTG_FS设备控制寄存器(OTG_FS_DCTL)

OTG_FS设备状态寄存器(OTG_FS_DSTS)

OTG_FS设备IN端点通用中断屏蔽寄存器(OTG_FS_DIEPMSK)

OTG_FS设备OUT端点通用中断屏蔽寄存器(OTG_FS_DOEPMSK)

OTG_FS设备所有端点中断寄存器(OTG_FS_DAINT)

OTG_FS所有端点中断屏蔽寄存器(OTG_FS_DAINTMSK)

OTG_FS设备V BUS放电时间寄存器(OTG_FS_DVBUSDIS)

OTG_FS设备V BUS脉冲时间寄存器(OTG_FS_DVBUSPULSE)

OTG_FS设备IN端点FIFO空中断屏蔽寄存器(OTG_FS_DIEPEMPMSK)

OTG_FS设备控制IN端点0控制寄存器(OTG_FS_DIEPCTL0)

OTG设备端点x控制寄存器(OTG_FS_DIEPCTLx)(其中x为端点号,x=1…3)

OTG_FS设备控制OUT端点0控制寄存器(OTG_FS_DOEPCTL0)

OTG_FS设备OUT端点x控制寄存器(OTG_FS_DOEPCTLx)(其中x为端点号,x=1…3) OTG_FS设备端点x中断寄存器(OTG_FS_DIEPINTx)(其中x为端点号,x=0…3)

OTG_FS设备端点x中断寄存器(OTG_FS_DOEPINTx)(其中x为端点号,x=0…3)

OTG_FS设备IN端点0传输长度寄存器(OTG_FS_DIEPTSIZ0)

OTG_FS设备OUT端点0传输长度寄存器(OTG_FS_DOEPTSIZ0)

OTG_FS设备端点x传输长度寄存器(OTG_FS_DIEPTSIZx)(其中x为端点号,x=1…3) OTG_FS设备IN端点传输FIFO状态寄存器(OTG-FS_DTXFSTSx)(其中x为端点号,x=0…3)

OTG_FS设备端点x传输长度寄存器(OTG_FS_DOEPTSIZx)(其中x为端点号,x=1…3) OTG_FS电源和时钟门控寄存器(OTG_FS_PCGCCTL)

以太网寄存器

(通信传输控制器)

MAC寄存器

以太网MAC设置寄存器(ETH_MACCR)

以太网MAC帧过滤器寄存器(ETH_MACFFR)

以太网MAC Hash列表高寄存器(ETH_MACHTHR)

以太网MAC Hash列表低寄存器(ETH_MACHTLR)

以太网MAC MII地址寄存器(ETH_MACMIIAR)

以太网MAC MII数据寄存器(ETH_MACMIIDR)

以太网MAC流控寄存器(ETH_MACFCR)

以太网MAC VLAN标签寄存器(ETH_MACVLANTR)

以太网MAC远程唤醒帧过滤器寄存器(ETH_MACRWUFFR)

以太网MAC PMT控制和状态寄存器(ETH_MACPMTCSR)

以太网MAC中断状态寄存器(ETH_MACSR)

以太网MAC中断屏蔽寄存器(ETH_MAIMR)

以太网MAC地址0高寄存器(ETH_MACA0HR)

以太网MAC地址0低寄存器(ETH_MACA0LR)

以太网MAC地址1高寄存器(ETH_MACA1HR)

以太网MAC地址1低寄存器(ETH_MACA1LR)

以太网MAC地址2高寄存器(ETH_MACA2HR)

以太网MAC地址2低寄存器(ETH_MACA2LR)

以太网MAC地址3高寄存器(ETH_MACA3HR)

以太网MAC地址3低寄存器(ETH_MACA3LR)

MMC寄存器

以太网MMC控制寄存器(ETH_MMCCR)

以太网MMC接收中断寄存器(ETH_MMCRIR)

以太网MMC发送中断寄存器(ETH_MMCTIR)

以太网MMC接收中断屏蔽寄存器(ETH_MMCRIMR)

以太网MMC发送中断屏蔽寄存器(ETH_MMCTIMR)

以太网MMC1次冲突后发送”好”帧的计数器寄存器(ETH_MMCTGFSCCR)

以太网MMC1次以上冲突后发送”好”帧的计数器寄存器(ETH_MMCTGFMSCCR)以太网MMC发送”好”帧的计数器寄存器(ETH_MMCTGFCR)

以太网MMC CRC错误接收帧计数器寄存器(ETH_ MMCRFCECR)

以太网MMC对齐错误接收帧计数器寄存器(ETH_ MMCRFAECR)

以太网MMC接收帧”好”单播帧计数器寄存器(ETH_ MMCRGUFCR)

27.8.3

飞思卡尔锁相环

备战飞思卡尔智能车大赛.开始模块总结. 锁相环设置. 公式: PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1), fbus=PLLCLK/2 void INIT_PLL(void) { CLKSEL &= 0x7f; //选用外部时钟.准备设置锁相环 PLLCTL &= 0x8F; //禁止锁相环 SYNR = 0xc9; //设置SYNR REFDV = 0x81; //设置REFDV PLLCTL |=0x70; //锁相环使能 asm NOP; asm NOP; //两个机器周期缓冲时间 while(!(CRGFLG&0x08)); //等待锁相环锁定 CLKSEL |= 0x80; //设置锁相环为时钟源 } 飞思卡尔XS128的PLL锁相环详细设置说明——关于如何提高总线工作频率PLL锁相环就相当于超频 单片机超频的原因和PC机是个一道理。分频的主要原因是外设需要的工作频率往往远低于CPU/MEMORY 这也和PC机南北桥的原理类似。总线频率设置过程 1、禁止总中断 2、寄存器CLKSEL(时钟选择寄存器)的第七位置0 即CLKSEL_PLLSEL=0。选择时钟源为外部晶振OSCCLK(外接晶振频率) 在PLL(锁相环)程序执行前 内部总线频率为OSCCLK/2 3. PLLCTL_PLLON=1 打开PLL 4.设置SYNR 时钟合成寄存器 、REFDV 时钟分频寄存器 、POSTDIV三个寄存器的参数 5、_asm(nop) _asm(nop);加入两条空指令 使锁相环稳定 6、while(!(CRGFLG_LOCK==1));//时钟校正同步 7、CLKSEL_PLLSEL=1; 下面详细说一下频率的计算一、时钟合成寄存器SYNR寄存器结构 VCOFRQ[1:0]控制压控振动器VCO的增益 默认值为00 VCO的频率与VCOFRQ[1:0]对应表

飞思卡尔单片机编程

关于Codewarrior 中的 .prm 文件 网上广泛流传的一篇文章讲述的是8位飞思卡尔单片机的内存映射,这几天,研究了一下Codewarrior 5.0 prm文件,基于16位单片机MC9S12XS128,一点心得,和大家分享。有什么错误请指正。 正文: 关于Codewarrior 中的.prm 文件 要讨论单片机的地址映射,就必须要接触.prm文件,本篇的讨论基于Codewarrior 5.0 编译器,单片机采用MC9S12XS128。 通过项目模板建立的新项目中都有一个名字为“project.prm”的文件,位于Project Settings->Linker Files文件夹下。一个标准的基于XS128的.prm文件起始内容如下: .prm文件范例: NAMES END SEGMENTS RAM = READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF;

READ_ONLY DATA_NEAR IBCC_NEAR 0x4000 TO 0x7FFF; ROM_C000 = READ_ONLY DATA_NEAR IBCC_NEAR 0xC000 TO 0xFEFF; //OSVECTORS = READ_ONLY 0xFF10 TO 0xFFFF; EEPROM_00 = READ_ONLY DATA_FAR IBCC_FAR 0x000800 TO 0x000BFF; EEPROM_01 = READ_ONLY DATA_FAR IBCC_FAR 0x010800 TO 0x010BFF; EEPROM_02 = READ_ONLY DATA_FAR IBCC_FAR 0x020800 TO 0x020BFF; EEPROM_03 = READ_ONLY DATA_FAR IBCC_FAR 0x030800 TO 0x030BFF; EEPROM_04 = READ_ONLY DATA_FAR IBCC_FAR 0x040800 TO 0x040BFF; EEPROM_05 = READ_ONLY DATA_FAR IBCC_FAR 0x050800 TO 0x050BFF; EEPROM_06 = READ_ONLY DATA_FAR IBCC_FAR 0x060800 TO 0x060BFF; EEPROM_07 = READ_ONLY DATA_FAR IBCC_FAR 0x070800 TO 0x070BFF; PAGE_F8 = READ_ONLY DATA_FAR IBCC_FAR 0xF88000 TO 0xF8BFFF;

飞思卡尔单片机寄存器及汇编指令详解

附录I:寄存器地址列表 直接页面寄存器总结

高页面寄存器总结

非易失寄存器总结 注:直接页面寄存器表地址的低字节用粗体显示,直接寻址对其访问时,仅写地址低字节即可。第2列中寄存器名用粗体显示以区别右边的位名。有0的单元格表示未用到的位总是读为0,有破折号的单元格表示未用或者保留,对其读不定。

附录II 指令接与寻址方式 HCS08指令集概括 运算符 () = 括号种表示寄存器或存储器位置的内容 ← = 用……加载(读: “得到”) & = 布尔与 | = 布尔或 ⊕= 布尔异或 ×= 乘 ÷ = 除 : = 串联 + = 加 - = 求反(二进制补码) CPU registers A =>累加器 CCR =>条件代码寄存器 H =>索引寄存器,高8位 X => 索引寄存器,低8位 PC =>程序计数器 PCH =>程序计数器,高8位 PCL =>程序计数器,低8位 SP =>堆栈指针 存储器和寻址 M =>一个存储区位置或者绝对值数据,视寻址模式而定 M:M + 0x0001 => 两个连续存储位置的16位值.高8位位于M的地址,低8位位于更高的连续地址. 条件代码寄存器(CCR)位 V => 二进制补码溢出指示,第7位 H => 半进位,第4位 I => 中断屏蔽,第 3位 N => 求反指示器, 第2位 Z => 置零指示器, 第1位 C => 进/借, 第0位 (进位第 7位 ) CCR工作性符号 – => 位不受影响 0 = > 位强制为0 1 = > 位强制为1

= >根据运算结果设置或清除位 U = > 运算后没有定义 机器编码符号 dd =>一个直接寻址0x0000–0x00FF的低8位(高字节假设为0x00) ee => 16位偏移量的高8位 ff => 16位偏移量的低8位 ii => 立即数的一个字节 jj => 16位立即数值的高位字节 kk => 16位立即数值的低位字节 hh => 16位扩展寻址的高位字节 ll => 16位扩展寻址的低位字节 rr => 相对偏移量 n —任何表达范围在0–7之间的一个有符号数的标号或表达式 opr8i —任何一个表达8位立即值的标号或表达式 opr16 —任何一个表达16位立即值的标号或表达式 opr8a —任何一个表达一个8位值的标号或表达式.指令对待这个8位值为直接页面64K 字节地址空间(0x00xx)中地址的低8位. opr16a —任何一个表达16位值的标号或表达式.指令对待这个值为直接页面64K字节地址空间. oprx8 —任何一个表达8位无符号值的标号或表达式,用于索引寻址. oprx16 —任何一个16位值的标号或表达式.因为HCS08有一个16位地址总线,这可以为一个有符号或者无符号值. rel —任何指引在当前指令目标代码最后一个字节之后–128 to +127个字节之内的标号或表达式.汇编器会计算包括当前指令目标代码在内的8位有符号偏移量. 寻址方式 隐含寻址(Inherent)如CLRA,只有操作码,无操作数,需要操作的数据一般为CPU寄存器,因此不需要再去找操作数了。(INH) 立即寻址 (Immediate)如LDA #$0A,“$”表示16进制,此时操作数位于FLASH空间,与程序一起存放。(IMM) 直接寻址 (Direct)如 LDA $88,只能访问$0000-$00FF的存储器空间,指令短速度快; (DIR) 扩展寻址 (Extended)如果操作数地址超出了$00FF,自动为扩展寻址;(EXT) 相对寻址(Relative)如BRA LOOP,指令中一般给出8位有符号数表示的偏移量。(REL) 变址寻址 (Indexed) 采用[H:X]或SP作为指针的间接寻址方式。( IX )( IX1 )( IX2 ) 变址寻址 (Indexed) 1〉无偏移量:CLR ,X 简写(IX) 2〉无偏移量,指令完成后指针加1(H:X = H:X + 0x0001) ,简写(IX+)只用于指令MOV和CBEQ指令中;

飞思卡尔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。 我们先要从头文件中找出相应中断的地址: PIT0【7:4】位为7,选择中断组: INT_CFADDR=0x70;

飞思卡尔寄存器整理

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、DDRE DDRA、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口上拉控制寄存器PUCR PUCR为8位寄存器,复位后的值为0。当PUPAE、PUPBE、PUPEE被设置为1时,A口、B口、E口具有内部上拉功能;为0时,上拉无效。当A口、B 口、E口为地址/数据总线时,PUPAE和PUPBE无效。 (3)A口、B口、E口降功率驱动控制寄存器RDRIV RDRIV为8位寄存器,复位后的值为0,此时,A口、B口、E口驱动保持全功率;当RDPA、RDPB、RDPE为1时, A口、B口、E口输出引脚的驱动功率下降 (4)数据寄存器PORTA、PORTB、PORTE PORTA、PORTB、PORTE均为8位寄存器,复位后的值为0,端口引脚输出低电平;要使引脚输出高电平,相应端口对应位应该置1。 由于PE0是/XIRQ、PE1是IRQ,因此,PE0和PE1只能设置为输入。

飞思卡尔单片机外设模块寄存器翻译

PIT 模块译: 翻译来自MC9S12X128英文原文PDF.P347-P357 PIT 块结构图: PIT0中断向量66, 1->67, 2->68, 3->69 PIT 相关寄存器详解: 1、 PITCFLMT :寄存器基本控制和基本时钟加载控制寄存器(8位) 1:PIT 使能 PITSWAI: 0:等待模式下仍然工作 1:等待模式下不工作 PITFRZ: 0:冻结模式下仍然工作 1:冻结模式下不工作 PFLMT1: 写1强制加载基本定时计数器1,写0无效,读也总为0 PFLMT0: 同PFLMT1 2、 PITFLT :PIT 计数器强制加载定时器寄存器(8位)

PFLT[3:0]写1相对应的16位计数寄存器会立即载入相对应的16位计数加载寄存器(PITLDn)中的值。 3、PITCE:PIT通道使能存器(8位) PCE[3:0]:如果PITE已经使能,对寄存器PCEn写1后,每输入一个时钟相对应的计数寄存器 开始递减,写0无效。 4、PITMUX:PIT基本时钟通道选择寄存器(8位) PMUX[3:0]:对PMUXn写1,则对应定时器通道选择基本时钟1作为输入,写0则选择基本时 钟0为输入。 5、PITINTE:PIT定时中断使能寄存器(8位) PINTE[3:0]:对PINTEn写1,当相对应的计数寄存器和基本计数寄存器归0时,产生中断请求,否则无效。 6、PITTF:PIT时钟输出标志寄存器(8位)

7、PITMTLD0-1:PIT基本时钟计数器预加载寄存器(8位) 会被加载到基本定时器n,无论什么时刻PFLMTn置“1”会立即更新基本定时器寄存器的值. 8、PITLD0–3:PIT0-3计数器预加载寄存器(16位) PITLD0-3的值用来加载到相对应计数器0-3的寄存器中。当相应通道计数器归零时,或PITFLT寄存器中相应的强制加载位置“1”时,PITLDn中的值将会被立即加载到PITCNTn。 9、PITCNT0–3:PIT0-3计数寄存器(16位) 变计数周期。

飞思卡尔单片机 DG128 Timer寄存器说明

Timer寄存器说明 1、定时器/计数器系统控制寄存器1(TSCR1) TSCR1 寄存器是定时器模块的总开关,它决定模块是否启动以及在中断等待、BDM 方式下的行为,还包括标志的管理方式。其各位的意义如下: TEN:定时器使能位,此外它还控制定时器的时钟信号源。要使用定时器模块的IC/OC 功能,必须将TEN 置位。如果因为某种原因定时器没有使能,脉冲累加器也将得不到ECLK/64 时钟,因为ECLK/64 是由定时器的分频器产生的,这种情况下,脉冲累加器将不能进行引脚电平持续时间的累加。 0:定时器/计数器被禁止,有利于降低功耗。 1:定时器/计数器使能,正常工作。 TSWAI:等待模式下计时器关闭控制位。 【注意】定时器中断不能用于使MCU 退出等待模式。 0:在中断等待模式下允许MCU 继续运行。 1:当MCU 进入中断等待模式时,禁止计时器。 TSFRZ:在冻结模式下计时器和计数器停止位。 0:在冻结模式下允许计时器和计数器继续运行。 1:在冻结模式下禁止计时器和计数器,用于仿真调试。 【注意】TSFRZ 不能停止脉冲累加。 TFFCA:定时器标志快速清除选择位。 0:定时器标志普通清除方式。 1:对于TFLGl($0E)中的各位,读输入捕捉寄存器或者写输出比较寄存器会自动清除相应的标志位CnF。对于TFLG2($0F)中的各位,任何对TCNT 寄存器($04、$05)的访问均会清除TOF 标志;任何对PACN3 和PACN2 寄存器($22,$23)的访问都会清除PAFLG 寄存器($21)中的PAOVF 和PAIF 位。任何对PACN1 和PACN0 寄存器($24,$25)的访问都会清除PBFLG 寄存器($21)中的PBOVF 位。 【说明】这种方式的好处是削减了另外清除标志位的软件开销。此外,必须特别注意避免对标志位的意外清除。 2、计时器系统控制寄存器2(TSCR2) 寄存器偏移量:$000D

飞思卡尔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),波特率发生器不工作。 【注意】在未写入SCIBDL,写SCIBDH没有反应。一般地,设置IREN=0,SR=52(总线频率8MHz),波特率为9600。 2、控制寄存器(SCICR1) 一般此寄存器可默认设置。

飞思卡尔寄存器使用

PLLSEL:选定锁环位 1 选定锁相环时钟0 选定外部时钟 PSTP:选定伪停止位伪停止模式下振荡器(工作1)/(停止0) SYSWAI:选定时钟停止位等待模式下系统时钟(停止1)/(继续工作0) ROAWAI:等待模式下降低振荡器放大倍数位 1 等待模式下降低振荡器放大倍数 0 等待模式下振荡器正常放大倍数 PLLWAI:等待模式下锁相环停止工作位 1等待模式下锁相环停止工作 0等待模式下锁相环正常工作 CWAI:等待模式下内核时钟停止工作位 1 等待模式下内核时钟停止工作 0 等待模式下内核时钟正常工作 RTIWAI:等待模式下实时时钟停止工作位 1 等待模式下实时时钟停止工作 0 等待模式下实时时钟正常工作 COPWAI:等待模式下看门狗时钟停止工作位 1 等待模式下看门狗时钟停止工作 0 等待模式下看门狗时钟正常工作 CME:时钟监控使能位。 PLLON:锁相环电路使能位。 AUTO:自动带宽控制位 1 选择高频带宽控制0 选择低频带宽控制 ACQ:自动带宽控制滤波器选择位(当AUTO=1时,该位无意义)。 PRE:CPU 伪停止状态时,实时中断(RT1)允许位。 PCE:CPU 虚拟停止时,看门狗(COP)允许位。 SCEM:自给时钟方式使能位,默认为1,探测到外部晶振停振时进入自给时钟模式,为0时,

禁止自给时钟模式,探测到外部晶振停振时复位。 时钟合成寄存器SYNR 读写Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Read 0 0 SYN5 SYN4 SYN3 SYN2 SYN1 SYN0 Write VCOFRQ[1:0](BIT7 BIT6)控制压控振动器VCO的增益,默认值为00,VCO的频率与VCOFRQ[1:0]对应表如下所示: 读写Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Read/Write REFFRQ1 REFFRQ0 REFDV5 REFDV4 REFDV3 REFDV2 REFDV1 REFDV0 REFFRQ[1:0]默认值为00,表示参考时钟频率在1~2MHZ之间,要求的参考时钟频率与REFFRQ[1:0]的设置值如下表如示: 读写Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Read RTIF PORF 0 LOCKIF LOCK TRACK SCMIF SCM Write RTIF:实时中断(RTI)标志位 1 发生实时中断0 未发生实时中断PROF:上电复位标志位 1 发生上电复位0 未发生上电复位LOCKIF:锁相环中断标志位 1 锁相环锁定位发生变化时,产生中断请求 0 锁相环锁定位未发生变化

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

1、定时器IC/OC功能选择寄存器TIOS IOS[7..0]IC/OC功能选择通道 0 相应通道选择为输入捕捉(IC) 1 相应通道选择为输出比较(OC) 2、定时器比较强制寄存器 CFORC FOC[7..0]设置该寄存器某个FOCn位为1将导致在相应通道上立即产生一个输出比较动作,在初始化输出通道时候非常有用。 【说明】这个状态和正常状态下输出比较发生后,标志位未被置位后的情况相同。 3、输出比较7屏蔽寄存器 OC7M OC7M[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数据寄存器 OC7D OC7D[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端口上。另 外,在OC7Mn置位后,相应的引脚就被设置为输出引脚,与DDRTn无关了,OC7Mn 并不改变DDR相应位的状态。 5、定时器核心计数寄存器 TCNT TCNT[15..0]XS128 Timer模块的核心是一个16位自由运行计数器(TCNT),所有输入捕捉和输出比较功能的计时信息都来源于TCNT,当定时器系统启用时,通过设置TSCR1的 TEN位,计数器从$0000开始,每经过一个模块时钟加1,直到加到$FFFF,然后自动 溢出为$0000并继续计数.16位自由记数器的当前值保存在两个8位寄存器中,高 的存在TCNTH,低的存在TCNTL中.综合这两个寄存器就形成TCNT.定义TCNT的 话,要定义为word型。 【说明】这里的模块时钟指的是,经过分频后的ECT模块所用的时钟,分频系数在TSCR2的低三位。TCNT是一个递增的计数器,有很多人一直把它当做是递减的计数器。总之,TCNT就是对ECT时钟进行计数的。

飞思卡尔入门程序总结

1.对IO口输入输出操作程序举例:A口接流水灯并实现闪烁 void main(void) { while(1) { DDRA=0xff; delay(500); PORTA=0xff; delay(500); PORTA=0; } 另外,B、E口的IO功能操作也是一样的,因为位数一样寄存器一样,其他口的寄存器就不太一样了!J,P,M,T,S这五个口除具有数据寄存器外,他们都另外多出另一个端口输入寄存器(该寄存器功能我未知)! 2.SPI总线接口 SPI是一种高速高效的同步串行接口,这种接口主要用于MCU与外部的接口芯片交换数据,只要有SPI口的芯片都可以与单片机相连形成主从机系统进行数据的传递,比如SPI用于移位寄存器74HC164,这是个串入并出的芯片这样可以实现扩展IO口。 还有AD转换芯片AD7793,可以实现数模转换,还有飞思卡尔公司的电源管理芯片MC33389。 因设备有限此功能待以后调试! 3.SCI总线接口 MC9S12DG128单片机有两个SCI模块,可以选用其中任何一个。他的使用有8个相应寄存器共设置,其中有波特率设置寄存器SCIBDH,SCIBDL,还有控制寄存器SCICR1,SCICR2,状态寄存器SCISR1,SCISR2,数据寄存器SCIDRH,SCIDRL; 简单讲SCI的使用就是寄存器初始化,数据传送方式设置,下面举个初始化使用的简单例子:SCICR2=0x08;//发送使能设置 SCIBDH=0x00;//波特率设置为9600 SCIBDL=0x9c; 就是这样这个是简单实用时的设置,发送函数如下: While(!(SCISR1&0x40))//检测是否发送完毕,一旦发送完毕就进入到死循 环里边 {} SCIDRL=C;//C代表需要传送的数据 4.有关定时器TCNT TCNT是芯片内部的16位主定时器,他不停地对内部时钟信号进行计数,从0x0000直到0xffff,计满后溢出又返回到0x0000,程序随时可以读取,但在普通模式下禁止写入。 TCNT应该按字访问,分别访问高低字节将出现错误! 可以直接利用它的来实现一些延时的功能! 例如下面的程序: #include #include "derivative.h" void TimerOverflow() { unsigned char i=1,j=0x80;

飞思卡尔单片机各种功能程序

流水灯四种效果: #include /* common defines and macros */ #include #include /* derivative information */ #pragma LINK_INFO DERIV ATIVE "mc9s12xdp512" #include "main_asm.h" /* interface to the assembly module */ unsigned char temp; //unsigned char pa @0x200; //unsigned char pb @0x202; unsigned char key; static void delay(void) { volatile unsigned long i; for(i=0;i<100000;i++); } static unsigned char random; static void Random(void) { random = (unsigned char)rand(); } void effect1() { unsigned char c; for(c=0;c<=6;c++) { delay(); PORTB = ~(1<=1;c--) { delay(); PORTB = ~(1<=1;c--) {

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

GPIO模块总结(以MC9S12G128为例)一、常见功能 二、端口详解 1、引脚图 小注: 1)除BKGD外,其余引脚都可用作通用的输入输出口。 2)EXTAL(PE0、12脚):外部晶振(时钟)输入引脚。

3)XTAL(PE1、14脚):内部晶体驱动输出引脚 4)IRQ(PB4、47脚):可屏蔽中断(即可由用户控制),芯片接收外部事件中断的主要手段,低电平或下降沿时产生中断请求。 2、分类 1)S12G128共有100个I/O口,其中通用I/O口84个,各端口所含寄存器如下图所示: 小注: 每个端口大部分为复用端口,通过配置相关寄存器可实现I/O口与不同模块或外设之间的数据通信。 2)各端口寄存器名称、位数(含有几个通道口)及常见功能说明如下表所示:由表1)可以看出: PORTA~PORTE端口所含寄存器种类相同; PORTP、PORTJ、PORTAD三者相同; PORTS、PORTM两者相同; PORTT单独为一种类型 按类型进行总结如下:

小注: a. 由上表可知,这五个寄存器通过同一个电阻控制寄存器PUCR的0~4位分别对应控制端口A~D; b. 在学习板中(这是前提,以下模块与寄存器的连接仅限此开发板): LED灯是通过PORTA寄存器控制,LED1~LED8分别对应PORTA的P0~P7位(注意两者的对应关系)。 PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 LED1 LED2 LED3 LED4 LED5 LED6 LED7 LED8 即寄存器的位与LED的排列顺序是相反的,给寄存器赋值时应注意。

小注: 端口P和J都含有7个寄存器,其中与中断有关的寄存器有两个:中断使能寄存器PIEx及中断标志寄存器PIFx。

飞思卡尔智能车程序汇总

1.流水灯程序: #include /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */ void delay(unsigned int ms) { unsigned int i; unsigned char j; for(i=0;i

2.液晶屏按键程序 #include /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */ #include "lcd5110.h" #include "24c02.h" #include "button.h" void delay(unsigned int ms) { unsigned int i; unsigned char j; for(i=0;i

飞思卡尔16位单片机寄存器分析总结

一、输入输出端口寄存器 I/O接口包括PORTA、B、E、K、T、S、M、P、H、J、AD。其中PORTA、B、E、K属于复用扩展总线接口,单片机在扩展方式下工作时,作为总线信号。 1、PORTT、S、M、P、H、J I/O寄存器PTx 如果对应位数据方向寄存器DDRx为“0”,输入,读取该寄存器返回引脚值;“1”,输出,读取该寄存器返回I/O寄存器的内容。 数据方向寄存器DDRx 决定对应引脚为输出还是输入,“0”为输入,“1”为输出,复位后,默认为输入。 上拉/下拉使能寄存器PERx 选择使用内置上拉/下拉器件,“1”允许,“0”禁用。 中断使能寄存器PIEx PORTP、H、J三个端口具有中断功能。“1”对应引脚允许中断,“0”禁止,复位后,所有端口中断关闭。 中断标志寄存器PIFx PORTP、H、J三个端口具有中断功能。“1”对应引脚允许中断,“0”禁止,复位后,所有端口中断关闭。 2、PORTA、B、E、K I/O寄存器Px 若某端口的引脚被定义为输出,写入I/O寄存器中的数值会从对应引脚输出;输入,通过I/O 寄存器读取对应引脚电平。 数据方向寄存器DDRx 决定对应引脚为输出还是输入,“0”为输入,“1”为输出,复位后,默认为输入。PORTE最低两位只能为输入。 上拉电阻控制寄存器PERx 第7、4、1、0位分别控制K、E、B、A端口,“1”允许使用对应端口的上拉电阻,“0”禁止,复位后,PK、PE端口使能,PB、PA禁止。 二、中断系统 中断控制寄存器INTCR 第7位IRQE,中断电平/边沿有效选择,0为低电平有效,1为下降沿有效; 第6位IRQEN,外部中断IRQ中断请求使能,0关闭,1允许。 三、PWM模块 PWM允许寄存器PWME 对应每一位PWMEx,1启动输出,0停止输出,读写任意时刻。 PWM预分频时钟选择寄存器PWMPRCLK 为Clock A和B选择独立的预分频因子,读写任意时刻。 Clock B对应6、5、4三位,Clock A对应2、1、0三位,分别可以实现2、4、8、16、32、64、128分频。 PWM比例因子寄存器A、B,PWMSCLA、PWMSCLB Clock SA=Clock A/(2*PWMSCLA) =$00时,默认值为256 PWM时钟选择寄存器PWMCLK 对应每一位是PCLKx,7、6、3、2通道:1选择Clock SB,0选择Clock B,5、4、1、0通道:1选择Clock SA,0选择Clock A。读写任意时刻。

飞思卡尔XS128外部中断优先级设置简易教程

。 先来看看XS128 DataSheet 中介绍的相关知识,只翻译有用的: 七个中断优先级 每一个中断源都有一个可以设置的级别 高优先级中断的可以嵌套低优先级中断 复位后可屏蔽中断默认优先级为1 同一优先级的中断同时触发时,高地址(中断号较小)的中断先响应 注意:高地址中断只能优先响应,但不能嵌套同一优先级低地址的中断 下面直接进入正题,看看怎么设置中断优先级: XS128中包括预留的中断一共有128个中断位,如果为每个中断都分配一个优先级寄存器的话会非常浪费资源,因此飞思卡尔公司想出了这样一种办法:把128个中断分为16个组,每组8个中断。每次设置中断时,先把需要的组别告诉某个寄存器,再设置8个中断优先寄存器的某一个,这样只需9个寄存器即可完成中断的设置。 分组的规则是这样的:中断地址位7到位3相同的中断为一组,比如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。 我们先要从头文件中找出相应中断的地址: PIT0【7:4】位为7,选择中断组: INT_CFADDR=0x70; 【3:0】为A,A/2=5,设置为第5优先级那么

飞思卡尔主要寄存器初始化程序段

1)团队有个大致分工 即团队成员有个大致的负责侧重点,但是要明白软件与硬件是分不开的,注意彼此相互学校。 2)熟悉核心控制芯片(今年是S12XS128系列的) 9S12XS128这类芯片看起来挺复杂,确实也挺复杂,不过用到的模块却不多,所以不要担心,你完全可以把它当成普通的51来学,你要用到哪里你就搞明白哪里,一个模块一个模块的做实验、调试。 核心掌握的模块有:.ECT ADC PWM MDC PLL SCI 因为要做一个智能车系统注意完成以下几个方面: ?单片机初始化模块,实时路径检测模块,舵机控制模块,驱动电机控制模块,中断速度采集模块。 ?(1)单片机的初始化模块包括:I/O模块、PWM模块、AD模块、计时器模块、定时中断模块初始化。 ?2)实时路径检测模块:光电传感器检测黑线,将返回信号输入单片机的输入端口,经单片机内部AD转换,进行分析,得出合适的PWM信号控制舵机转向。 ?3)舵机控制模块,驱动电机控制模块:通过直接输出PWM信号控制。舵机的控制采用开环控制,驱动电机采用PID算法控制。 所以让小车跑起来不难,接下来我分享下我调试各模块一些方法与经验 IO口模块程序示例 Void PORTB_Init(void){ DDRB=0xff; //PB口作输出使用,1为输出,0为输入 PORTB=0x00; //PB口数据寄存器值 } 注意:IO口要注意以下几点:(1)每个IO口的数据寄存器名可能不同(2)AN口只能作输入用(3)PH,PJ(高两位,低两位),PP可用输入中断功能使用(4)IO口作输入与输出时有不同的寄存器对应(5)IO口作复用时不能作IO口用,相反也不行

飞思卡尔 freescale Kinetis KL25系列资料大全及实例汇总

Freescale Kinetis KL25系列社区资料大全及实例汇总 介绍: Freescale 公司Kinetis KL25 MCU向L系列内增加了带集成低压稳压器的全速USB 2.0 OTG控制器,采用32位ARM Cortex-M0内核,拥有48MHz内核频率,工作电压为1.71V~3.6V,。KL25系列作为低功耗、低价格、高性能的微控制器,给工程师们提供了一个合适的入门级32位方案。 本文精选了Kinetis K25教程、例程、设计案例,以及基于Kinetis KL25的流行开发板,集结了国内外官方资料和资深工程师的经验,是学习Kinetis KL25 MCU的必备宝典。 Kinetis KL25 MCU 的功能框图 Kinetis KL25 MCU 教程篇

Kinetis KL25 MCU官方参考手册 Kinetis KL25 MCU 官方数据手册 飞思卡尔Kinetis系列产品开发资源链接总汇 包含Kinetis系列产品的参考手册、数据手册、编译环境、调试工具的相关资源链接。 KL25中文用户手册 官方Kinetis L系列三大特性演示视频(附中文说明文档) 你在设计中往往会忽略掉Kinetis L系列的重要的特性。如果你只是简单的把Kinetis L系列当做一般的Cortex-M0的单片机来使用的话,我们的设计人员估计要郁闷了。闲话少说,赶紧来看看你可能忽略的特性吧 Cortex-M0+, 到底“+”了什么(有视频,有中文文档) 飞思卡尔Kinetis L系列采用的内核是Cortex-M0+,而不是Cortex-M0。这个小小的加号到底增加了什么呢?小小视频讲的一清二楚。 根据KL系列芯片上的缩略标志识别具体型号 大家在使用kinetis芯片的时候,可能会发现一些比较小的芯片上并没有刻出芯片的具体型号,而是刻了一个缩略型号名称,那么如何根据这个缩略名称来识别具体的型号呢? 文中罗列了Kinetis L系列所有的缩略型号对应的芯片具体型号名称,方便大家识别。 KL25 TSI基本原理介绍 TSI(Touch Sensing Interface)模块是飞思卡尔为简化硬件设计人员开发而嵌入到Kinetis架构的电容触摸感应模块,本篇主要介绍TSI模块的基本原理。 KL25 ADC模块详细介绍 文中包含了ADC的模块框图以及对每个模块的详细介绍。 开发篇 FRDM-KL25 cdc win 7 DRIVER 下载 超核KL25固件库BetaV0.5 版 更新的主要内容: - 完善了几乎所有模块的注释,大家使用起来更方便

相关文档
最新文档