控制寄存器配置脚本
- 格式:doc
- 大小:32.00 KB
- 文档页数:3
#include <reg54.h>#include <absacc.h>#include "uip.h"sbit RESET=P4^0;typedef unsigned char uchar;typedef unsigned int uint;#define TX_PAGES 6#define NE_START_PG 0x40 //发送寄存器的首页地址#define TX_START_PG NE_START_PG#define NE_STOP_PG 0x60 //接收寄存器环的末地址+1#define RX_STOP_PG NE_STOP_PG //#define RX_START_PG NE_START_PG + TX_PAGES#define RX_CURR_PG RX_START_PG + 1//下面定义的是RTL8019AS特殊寄存器#define BASE_ADDRESS 0x8000#define CR XBYTE [BASE_ADDRESS+0x0000] //设置CR寄存器地址#define DMA_PORT XBYTE [BASE_ADDRESS+0x1000] //设置远程DMA端口#define RESET_PORT XBYTE [BASE_ADDRESS+0x1800] //设置复位端口//---------定义PAGE0-------------//定义PAGE0中的只读寄存器#define PG0_CLDA0 XBYTE [BASE_ADDRESS+0x0100]#define PG0_CLDA1 XBYTE [BASE_ADDRESS+0x0200]#define PG0_BNRY XBYTE [BASE_ADDRESS+0x0300]#define PG0_TSR XBYTE [BASE_ADDRESS+0x0400]#define PG0_NCR XBYTE [BASE_ADDRESS+0x0500]#define PG0_FIFO XBYTE [BASE_ADDRESS+0x0600]#define PG0_ISR XBYTE [BASE_ADDRESS+0x0700]#define PG0_CRDA0 XBYTE [BASE_ADDRESS+0x0800]#define PG0_CRDA1 XBYTE [BASE_ADDRESS+0x0900]#define PG0_8019D0 XBYTE [BASE_ADDRESS+0x0A00]#define PG0_8019D1 XBYTE [BASE_ADDRESS+0x0B00]#define PG0_RSR XBYTE [BASE_ADDRESS+0x0C00]#define PG0_CNTR0 XBYTE [BASE_ADDRESS+0x0D00]#define PG0_CNTR1 XBYTE [BASE_ADDRESS+0x0E00]#define PG0_CNTR2 XBYTE [BASE_ADDRESS+0x0F00]//定义PAGE0中的只写寄存器#define PG0_PSTART XBYTE [BASE_ADDRESS+0x0100]#define PG0_PSTOP XBYTE [BASE_ADDRESS+0x0200]#define PG0_BNRY XBYTE [BASE_ADDRESS+0x0300]#define PG0_TPSR XBYTE [BASE_ADDRESS+0x0400]#define PG0_TBCR0 XBYTE [BASE_ADDRESS+0x0500]#define PG0_TBCR1 XBYTE [BASE_ADDRESS+0x0600]#define PG0_ISR XBYTE [BASE_ADDRESS+0x0700]#define PG0_RSAR0 XBYTE [BASE_ADDRESS+0x0800]#define PG0_RSAR1 XBYTE [BASE_ADDRESS+0x0900]#define PG0_RBCR0 XBYTE [BASE_ADDRESS+0x0A00]#define PG0_RBCR1 XBYTE [BASE_ADDRESS+0x0B00]#define PG0_RCR XBYTE [BASE_ADDRESS+0x0C00]#define PG0_TCR XBYTE [BASE_ADDRESS+0x0D00]#define PG0_DCR XBYTE [BASE_ADDRESS+0x0E00]#define PG0_IMR XBYTE [BASE_ADDRESS+0x0F00]//定义PAGE1 读写寄存器#define PG1_PAR0 XBYTE [BASE_ADDRESS+0x0100]#define PG1_PAR1 XBYTE [BASE_ADDRESS+0x0200]#define PG1_PAR2 XBYTE [BASE_ADDRESS+0x0300]#define PG1_PAR3 XBYTE [BASE_ADDRESS+0x0400]#define PG1_PAR4 XBYTE [BASE_ADDRESS+0x0500]#define PG1_PAR5 XBYTE [BASE_ADDRESS+0x0600]#define PG1_CURR XBYTE [BASE_ADDRESS+0x0700]#define PG1_MAR0 XBYTE [BASE_ADDRESS+0x0800]#define PG1_MAR1 XBYTE [BASE_ADDRESS+0x0900]#define PG1_MAR2 XBYTE [BASE_ADDRESS+0x0A00]#define PG1_MAR3 XBYTE [BASE_ADDRESS+0x0B00]#define PG1_MAR4 XBYTE [BASE_ADDRESS+0x0C00]#define PG1_MAR5 XBYTE [BASE_ADDRESS+0x0D00]#define PG1_MAR6 XBYTE [BASE_ADDRESS+0x0E00]#define PG1_MAR7 XBYTE [BASE_ADDRESS+0x0F00]//定义PAGE2 只读寄存器#define PG2_PSTART XBYTE [BASE_ADDRESS+0x0100]#define PG2_PSTOP XBYTE [BASE_ADDRESS+0x0200]#define PG2_TPSR XBYTE [BASE_ADDRESS+0x0400]#define PG2_RCR XBYTE [BASE_ADDRESS+0x0C00]#define PG2_TCR XBYTE [BASE_ADDRESS+0x0D00]#define PG2_DCR XBYTE [BASE_ADDRESS+0x0E00]#define PG2_IMR XBYTE [BASE_ADDRESS+0x0F00]//定义PAGE3 寄存器#define PG3_9346CR XBYTE [BASE_ADDRESS+0x0100] #define PG3_CONFIG0 XBYTE [BASE_ADDRESS+0x0300] #define PG3_CONFIG1 XBYTE [BASE_ADDRESS+0x0400] #define PG3_CONFIG2 XBYTE [BASE_ADDRESS+0x0500] #define PG3_CONFIG3 XBYTE [BASE_ADDRESS+0x0600] #define PG3_CONFIG4 XBYTE [BASE_ADDRESS+0x0D00]//以下是特殊寄存器的位定义// CR寄存器#define stop_cmd 0x01 //停止接受或发送数据#define start_cmd 0x02 //启动接受或发送数据#define txp 0x04 //发送数据#define no_dma 0x00 //禁止DMA#define read_dma 0x08 //允许远程DMA读#define write_dma 0x10 //允许远程DMA写#define send_pck 0x18 //发送数据#define abort_dma 0x20 //退出/完成远程DMA#define page0 0x00 //PAGE0选择#define page1 0x40 //PAGE1选择#define page2 0x80 //PAGE2选择#define page3 0xc0 //PAGE3选择// ISR中断状态寄存器#define isr_prx 0x01 //无错误接受数据包#define isr_ptx 0x02 //无错误发送数据包#define rxe 0x04 //接受数据包带有如下错误:CRC错误、包丢失错误以及帧队列错误#define txe 0x08 //过分冲突导致传输错误#define ovw 0x10 //接受缓冲器溢出#define cnt 0x20 //当一个或多个网络计数器的MSB 设置完成时该位被设置。
◆普通模式相当于定时器计数器。
可内部计数也可接受外部引脚计数。
(0xFFFF为TOP)●第一步设置工作模式T/C控制寄存器TCCR1B中CS02CS01 CS00位●第二步设置初值T/C寄存器TCNT1H TCNT1L共16位。
(先写高位后写低位)●第三步开定时器中断T/C中断屏蔽寄存器TIMSK中TOIE1置位●第四步开总中断SREG|=BIT(7)内部状态:当到达TOP值时,T/C中断标志寄存器TIFR中TOV1位自动变为1,由此进入中断,且此标志自动清零。
但是需要在中断中重新设置初值。
以下几种模式很少用到中断。
◆CTC模式比较输入模式,当TCNT1的值计数到的值与OCR1A 或ICR1 寄存器的值匹配时,引脚输出电位发生相应变化,且TCNT1从0开始重新计数。
常用来输出50%占空比的方波。
●第一步先设置PD5(OC1A)和PD4(OC1B)为输出●第二步设置工作模式T/C控制寄存器TCCR1A和TCCR1B中WGM13 WGM12 WGM11 WGM10选择CTC的相应模式。
COM1A1 COM1B1 COM1A0 COM1B0选择匹配后具体动作(常用01)CS02CS01 CS00设置预分频●第三步设置TOP值输出比较寄存器OCR1A/ICR1写入TOP值◆快速PWM模式相对于CTC模式,可以人为设置占空比。
具体方法是有两个寄存器,一个储存匹配值,一个储存TOP值。
匹配时清0,达到TOP值时置位。
此方式用于输出脉冲来控制电机。
●第一步先设置PD5(OC1A)和PD4(OC1B)为输出●第二步设置工作模式T/C控制寄存器TCCR1A和TCCR1B中WGM13 WGM12 WGM11 WGM10选择CTC的相应模式。
(以15模式为例子)COM1A1 COM1B1 COM1A0 COM1B0选择匹配后具体动作(常用10)CS02CS01 CS00设置预分频●第三步设置TOP值和匹配值输出比较寄存器OCR1A写入TOP值输出比较寄存器OCR1B写入匹配值注意:此时OC1B能够输出此PWM波形,而因为OCR1A存储了TOP值,所以OC1A 无法输出PWM。
寄存器的编程与控制实验寄存器是计算机中非常重要的组成部分,它们存储着关键的数据和指令。
在编程和控制实验中,对寄存器的正确使用和控制是至关重要的。
本文将介绍寄存器的编程和控制实验的基本概念和技巧。
一、寄存器的概念和作用寄存器是一种用于存储和操作数据的硬件设备。
在计算机中,寄存器承担着多种重要的角色,如存储临时数据、地址计算、数据传输等。
寄存器有不同的类型,包括通用寄存器、特殊目的寄存器等。
通过编程和控制实验,我们可以更好地理解寄存器的作用和使用方法。
二、编程实验:寄存器的读取和写入在寄存器的编程实验中,我们需要掌握如何读取和写入寄存器中的数据。
首先,我们需要明确寄存器的地址和类型。
然后,通过编写相应的代码,可以实现从寄存器读取数据或向寄存器写入数据。
在实验中,可以使用不同的编程语言和开发工具,比如C语言、汇编语言等。
三、控制实验:寄存器的控制和操作除了读取和写入数据,寄存器还可以用于控制和操作其他硬件设备。
在实验中,我们可以通过编程来控制和操作特定的寄存器,从而实现对其他设备的控制。
例如,我们可以通过设置某个寄存器的值来控制LED的亮灭,或者通过读取某个寄存器的值来获取传感器的数据。
四、实验注意事项在进行寄存器的编程和控制实验时,需要注意以下事项:1.了解寄存器的地址和类型,确保正确读写;2.遵循实验指导书或教师的要求,选择合适的编程语言和开发工具;3.仔细阅读设备的说明书或文档,了解寄存器的功能和使用方法;4.注意编写代码的规范性和可读性,确保代码的正确性和稳定性;5.实验过程中,注意安全操作,避免对设备产生损坏或危险。
总结:通过寄存器的编程和控制实验,我们可以更好地理解寄存器的概念和作用,掌握读取和写入寄存器的方法,并进行寄存器的控制和操作。
这对于我们深入了解计算机硬件和软件之间的联系,以及学习嵌入式系统开发等领域都具有重要意义。
通过实验的练习和实践,我们能够提高自己的编程和控制能力,为未来的职业发展打下坚实的基础。
EPWMTMSF28335所需配置的EPWM寄存器一.TB模块需要设置的寄存器TBCTL_BITS {// bits descriptionUint16 CTRMODE:2; // 1:0 Counter ModeUint16 PHSEN:1; // 2 Phase load enable Uint16 PRDLD:1; // 3 Active period load Uint16 SYNCOSEL:2; // 5:4 Sync output select Uint16 SWFSYNC:1; // 6 Software force sync pulseUint16 HSPCLKDIV:3; // 9:7 High speed time pre-scaleUint16 CLKDIV:3; // 12:10 Timebase clock pre-scaleUint16 PHSDIR:1; // 13 Phase DirectionUint16 FREE_SOFT:2; // 15:14 Emulation mode1.TBCTL:TB控制寄存器设置TBCTL_REG.BITS.CTRMODE:2 (计数模式设置)TB_COUNT-UP 0x0;TB_COUNT_DOWN 0x1;TB_COUNT_UPDOWN 0x2;TB_FREEZE 0x3;TBCTL_REG.BITS.PHSEN:1 (相位装载使能控制)TB_DISABLE 0x0;TB_ENABLE 0x1; 直接将计数器中的值装载到TBCTR计数控制寄存器中。
TBCTL_REG.BITS.PRDLD:1 (时基周期映射使能)TB_SHADOW 0x0 使能TBPRD映射寄存器,读写TBPRD寄存器地址直接操作映射寄存器,当时基计数器计数值等于0时,映射寄存器内容传送到工作寄存器。
默认状态下TBPRD映射寄存器被使能。
TB_IMMEDIATE 0x1 立即装载模式,不需要等到时基计数器计数值等于0时,就直接将TBPRD的存储地址直接操作工作寄存器中。
I\O端口控制向量组合:P_SystemClock单元设置CPU时钟选择PLL(Fosc)频率选择:P_Timebase_Setup单元Timebase频率选择:P_TimerA_Ctrl单元:时钟源A选择位:时钟源B选择位:TimerA结构:P_TimerB_Ctrl单元:时钟源C选择位:TimerB结构:占空比设置B6-B9:P_SIO_Ctrl(写)单元(SIO串行设备输入输出口):P_UART_Command1(写) 单元为UART 控制口:P_UART_Command2 (写) 单元在写入模式时,为UART 数据发送/接收控制口:P_UART_Command2(读):符号约定:中断源:SPCE061A 单片机的中断系统有14 个中断源分为两个定时器溢出中断、两个外部中断、一个串行口中断、一个触键唤醒中断、7个时基信号中断、PWM音频输出中断。
中断控制单元P_INT_Ctrl(读/写)(7010H)P_INT_Ctrl 控制单元具有可读和可写的属性,其读写时的意义是不同的:写--“1”开中断、“0”关中断;读--中断标志位“1”有中断请求,“0”无中断请求:清除中断标志控制单元P_INT_Clear(写)(7011H):只要将该寄存器中对应的中断位置“1”即可清除该中断状态标志位。
激活和屏蔽中断控制单元P_INT_Ctrl_New(读/写)($702DH)中断控制指令:(SPCE061A 中断除UART 中断外,所有的中断均需软件清除标志位,即将P_INT_Clear 中相应的中断位清零。
即可将中断请求撤销。
而UART 中断,则是硬件自动清零)中断源判断:因为SPCE061A 中断源多于中断入口地址,所以当CPU响应中断后,经中断入口地址进入中断服务程序,通过读P_INT_Ctrl 可判断产生中断请求的中断源。
定时器中断:时基中断(2Hz、4Hz、8Hz、16Hz、32Hz、64Hz、128Hz、256Hz、512Hz、1024H、2048Hz、4096Hz 等多种频率)外部中断:(SPCE061A 有两个外部中断,为负跳沿触发)选择外部中断1,初始化IOB2 为带上拉电阻的输入端口;选择外部中断2,初始化IOB3 为带上拉电阻的输入端口位高阻输入。
>手把手教你写S12XS128程序(26)--SCI寄存器说明1时间:2010-01-22 22:44来源:电子设计吧作者:dzsj8 点击: 243次1、波特率控制寄存器(SCIBDH、SCIBDL)IREN:红外调制模式使能位1 使能0 禁止TNP[0..1]:窄脉冲发射位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、数据寄存器(SCIDRH、SCIDRL)SCI 内部分别设有发送和接收两个数据寄存器,其低位都通过 SCIDRL 访问,读操作返回接收数据寄存器 RDR 的内容,写操作数据置入发送数据寄存器。
TDR。
当 M=1 即运行在 9 位数据模式时,SCIDRL 和 SCIDRH 形成 9 位的 SCI数据字,这时必须先写入SCIDRH,以便与低位字节(SCIDRL)一起进入发送移位器。
如果 M=0 即 SCI 只用于 7 位或8 位的数据传送,可以只访问 SCIDRL。
当 PE=1 即奇偶校验允许时,奇偶校验位由硬件负责,无需软件干预。
R8:接收到的位 8,该位写操作无效。
当 SCI 设置成 9 位数据运行模式时,该位是从串行数据流中接收到的第 9 位。
T8:发送位 8,任何时候可写。
寄存器配置RCC这⾥我翻车过,⼀度认为是晶振坏了,可是仔细想想不太对,最终才改过来,现在我就来说说⾃⼰是如何犯错并且发现问题的。
配置流程1.看图图⽚模糊⼀点没事,反正你都得去看中⽂参考⼿册⾼清⽆码⼤图。
具体看图⽅法⽂字倒是不好描述,建议到去搜索视频讲解⼀看,然后脑⼦晕晕的再来看⽂字描述就会懂了。
2.看看参考⼿册上对外设的描述你可能在看各种教程时就已经或多或少的知道了外设的描述(多少取决于视频⽼师讲的和理解的),但是,还是建议看⼀下参考⼿册⾥的描述。
3.认识寄存器见中⽂参考⼿册就这些了,看看理解能⼒不太差的都能懂,啥位置1代表啥的,都写得超级详细的了4.写写代码测试不试⼀下永远不知道代码是错的。
见下⾯我亲⼿撸的代码:void System_clock(void){volatile uint32_t StartUpCount = 0,HSEStatus = 0;//时间向上计数 HSE状态标志RCC->CR |=(0x01<<16);//使能HSE//等待HSE稳定do{HSEStatus=RCC->CR & (0x01<<17);StartUpCount++;}while((HSEStatus==0) && (StartUpCount!=HSE_STARTUP_TIMEOUT));//HSE_STARTUP_TIMEOUT=0x0500if(StartUpCount!=HSE_STARTUP_TIMEOUT){HSEStatus=0x01;}else{HSEStatus=0x00;}//如果启动成功if(HSEStatus==0x01){//使能FLASH预存取缓存区(处理代码等待时间的设置)FLASH->ACR |= (0x01<<4);//配置时延位配置⾼位低位可运⾏,配置低位⾼位会进⼊硬件错误,程序卡死FLASH->ACR &=0x00;FLASH->ACR |=(0x02<<0);RCC->CFGR &=0;//位清零RCC->CFGR |=(0x01<<16);//选择PLL时钟源RCC->CFGR &=~(1<<17);//HSE不分频RCC->CFGR |=(0x07<<18);//PLL锁相环倍频9RCC->CR |=(0x01<<24);//使能PLLwhile((RCC->CR & (0x01<<25))==0);//等待PLL稳定(锁定)RCC->CFGR &=~(0x08<<4);//AHB不分频RCC->CFGR |=(0x04<<8);//APB1分频2RCC->CFGR &=(0x07<<11);//APB2不分频RCC->CFGR |=(0x02<<14);//ADC分频6,只有12MHZ,达不到最⼤14MHZRCC->CFGR |=(0x07<<24);//MCO时钟源PLL分频2,36MHZRCC->CFGR |=(0x02<<0);//选择SYSCLK时钟源while(((RCC->CFGR & (0x08))==0)&&((RCC->CFGR & (0x0c)))==0x0c);//确保PLL作为系统时钟源}else{//启动失败,添加补救代码}}好了,到了这⾥,如何检测代码对错呢?通常有以下⽅法:1.使⽤MCO时钟输出,复⽤PA8引脚。
SYNCH —Synchronized Status:同步状态。
SYNCH =1,MSCAN08与CAN总线同步;SYNCH =0,MSCAN08与CAN总线不同步。
TLNKEN —Timer Enable:时钟使能。
TLNKEN =1,MSCAN08时钟信号输出连接到片上时钟输入;TLNKEN =0,MSCAN08不连接到时钟输入。
SLPAK —Sleep Mode Acknowledge:睡眠模式确认。
SLPAK标志位指示MSCAN08是否处于睡眠模式,SLPAK =1,表示MSCAN08处于内部睡眠模式;SLPAK =0,不在内部睡眠模式。
SFTRES —Soft Reset:软复位。
SFTRES =1,MSCAN08处于软复位状态;SFTRES =0,MCAN08处于正常运行状态。
当SFTRES被置为1时,MSCAN08立即进入软复位状态。
此时,MSCAN08所有正在进行的收发操作都被中止,且不再与CAN总线保持同步。
只有在软复位状态下,才能对寄存器MCR1、BTR0、BTR1、IDAC、IDAR0-IDAR3、IDMR0-IDMR3进行写操作。
当该位清0时,MSCAN08将在11个隐性位后与总线保持同步。
(2)MSCAN08模式控制寄存器1 (Module Control Register 1,CMCR1)模式控制寄存器1定义了MSCAN08模块的时钟源、唤醒模式及工作方式。
地址:$0501LOOPB —Loop Back Self-Test Mode:回环自测模式位。
LOOPB =1,激活回环自测模式;LOOPB =0,正常运行模式。
当处于回环自测模式时,CAN RX引脚被忽略,CAN TX引脚输出隐性值,MSCAN08将自己发送的报文当成是从远程节点上发送过来的报文进行接收,并产生发送和接收中断。
通过自测模式可以在不接任何外外围器件的基础上,测试MSCAN08工作是否正常。
WUPM —Wakeup Mode:唤醒模式位。
案例8:修改配置寄存器1. 案例目标通过本案例,你可以掌握如下技能:1)查看与修改配置寄存器2. 设备与拓扑设备:1台Laptop-PT,1台2811路由器。
拓扑:如下图。
3. 操作步骤步骤1:按以上拓扑添加和连接设备。
步骤2:查看配置寄存器。
Router#sh versionCisco IOS Software, 2800 Software (C2800NM-ADVIPSERVICESK9-M),Version 12.4(15)T1, RELEASE SOFTWARE (fc2)………Configuration register is 0x2102 //这是配置寄存器的缺省配置Router#步骤3:修改配置寄存器1)修改配置寄存器为0x2101,以便从ROM中启动IOSRouter#conf tEnter configuration commands, one per line. End with CNTL/Z. Router(config)#config-register 0x2101 //修改配置寄存器为0x2101 Router(config)#end%SYS-5-CONFIG_I: Configured from console by consoleRouter#sh verCisco IOS Software, 2800 Software (C2800NM-ADVIPSERVICESK9-M), Version 12.4(15)T1, RELEASE SOFTWARE (fc2)………Configuration register is 0x2102 (will be 0x2101 at next reload)2)重启路由器Router#reloadProceed with reload? [confirm]………Router#sh verCisco IOS Software, 2800 Software (C2800NM-ADVIPSERVICESK9-M), Version 12.4(15)T1, RELEASE SOFTWARE (fc2)Configuration register is 0x2101 //注意配置寄存器已改为0x2101 Router#Router#sh flash: //此命令可查看flash中的IOS文件System flash directory:File Length Name/status3 509380042 28282 sigdef-category.xml1 227537 sigdef-default.xml[51193823 bytes used, 12822561 available, 64016384 total]63488K bytes of processor board System flash (Read/Write)Router#3)恢复配置寄存器的缺省值Router#conf tEnter configuration commands, one per line. End with CNTL/Z. Router(config)#config-register 0x2102Router(config)#注意:修改配置寄存器通常是临时性的特殊行为,完成特殊操作之后,应将配置寄存器恢复为正常的缺省配置,以便恢复正常启动顺序。
寄存器设置RCC寄存器分为:CR 时钟控制寄存器CFGR 时钟配置寄存器CIR 时钟中断寄存器APB2RSTR APB2外设复位寄存器APB1RSTR APB1外设复位寄存器AHBENR AHB外设时钟使能寄存器APB2ENR APB2外设时钟使能寄存器APB1ENR APB1外设时钟使能寄存器BDCR 备份域控制寄存器CSR 控制/状态寄存器编程的第一步就是RCC的初始化,请问这些寄存器该怎么设置?谢谢,发帖的目的是学习,也是自我总结,希望各位指正1.时钟控制寄存器RCC_CR复位值为:0000 XX83H ;能以字,半字,字节访问位0 HSI内部高速时钟使能,1打开位1 HSIRDY内部高速时钟可用标志,1可用位3-7 内部高速时钟调整位8-15内部高速时钟校验,这些位在启动时被自动初始化位16 HSEON外部高速时钟使能,1可用位17 HSERDY外部高速时钟可用标志,1可用位18 HSEBYP外部高速时钟旁路位24 PLLON PLL使能,1打开位25 PLLRDY PLL可用标志,1锁定2.时钟配置寄存器CFGR位1-0 SW系统时钟切换00:HIS被选为系统时钟10:HSE被选为系统时钟01:PLL被选为系统时钟位3-2 SWS系统时钟转换状态00:HIS被选为系统时钟10:HSE被选为系统时钟01:PLL被选为系统时钟11:不可用位7-4HPREAHB 预分频器0xxxSYSCLK未被分频1000SYSCLK被2分频1001SYSCLK被4分频1010SYSCLK被8分频1011SYSCLK被16分频1100SYSCLK被64分频1101 1281110 2561111SYSCLK被512分频位10-8 PPRE1APB低速预分频器0xxHCLK未被分频100 2101 4110 8111 16位13-11 PPRE2APB高速预分频器0xxHCLK未被分频100 2101 4110 8111 16位15-14 ADC预分频器00:PLCK2被2分频01:PLCK2被4分频10:PLCK2被6分频11:PLCK2被8分频。
/*----------------------------------------------------------------* 作者:张俊伟* 日期:2012年2月15日** 文件名:Timer.c** 文件功能描述:定时器_A 模块资源:一个16 位计数器TAR、三个捕获/比较寄存器CCRx 三个捕获/比较控制寄存器CCTLx.* TACTL 控制寄存器: 1、选择时钟源是否分频* 2、选择计数模式* 3、使能定时器中断(清楚TAR(TACTL |= TACLR;)也可以不写)* 4、定时器溢出TAFLG会置位(一般只设置1、2、3)* CCTLx 捕获/比较控制寄存器:* 1、选择捕获模式* 2、**** 范例说明:* 修改描述:*****----------------------------------------------------------------*//**************************************************************************** * ---------* 定时器A* ---------* TACTL 控制寄存器* -----------------------------------------------------------------/* 15--10 9 8 7 6 5 4 3 2 1 0 /* 未用SSEL1 SSEL0 ID1 ID0 MC1 MC0 未用CLR TAIE TAIFG /* -----------------------------------------------------------------/* SSEL1、SSEL0 //选择定时器输入分频器的时钟源* TACTL |= TASSEL_0; // TACLK 用特定的外部引脚信号* TACTL |= TASSEL_1; // ACLK 辅助时钟* TACTL |= TASSEL_2; // TACLK 子系统时钟* TACTL |= TASSEL_3 ; // TACLK 见器件说明** ID1 ID0 //输入分频选择* TACTL |= ID_0; //不分频* TACTL |= ID_1; //2 分频* TACTL |= ID_0; //4 分频* TACTL |= ID_0; //8 分频** MC1 MC0 //计数模式控制位* TACTL |= MC_0; //停止模式停止计数器* TACTL |= MC_1; //增计数模式* TACTL |= MC_2; //连续计数模式* TACTL |= MC_3; //增/减计数模式** CLR // 定时器清除位* TACTL |= TACLR; //如果不是被清除模式控制暂停,则定时器以增计数模式开始工作。
AXD调试时,初始化ARM处理器的脚本
2011-03-24 21:44
老师给的东西,标记一下,省的丢了。
以前不知道这是干什么用的,现在知道啦,初始化处理器的。
ARM上电以后没有做过任何的初始化。
一般会通过执行一个脚本来对ARM做一个基本的初始化。
脚本一
般就是一个txt文件。
使用方法:AXD==>>options==>>configure interface==>>session File==>>Run configure Script==>>Browser
文件如下:
Setmem 0x53000000 0x00000000 32
Setmem 0x4A000008 0xFFFFFFFF 32
Setmem 0x4A00001C 0x000007FF 32
Setmem 0x53000000 0x00000000 32
Setmem 0x56000050 0x000055AA 32
Setmem 0x4C000014 0x00000007 32
Setmem 0x4C000000 0x00FFFFFF 32
Setmem 0x4C000004 0x00061012 32
Setmem 0x4C000008 0x00040042 32
Setmem 0x48000000 0x22111120 32
Setmem 0x48000004 0x00002F50 32
Setmem 0x48000008 0x00000700 32
Setmem 0x4800000C 0x00000700 32
Setmem 0x48000010 0x00000700 32
Setmem 0x48000014 0x00000700 32
Setmem 0x4800001C 0x00018005 32
Setmem 0x48000020 0x00018005 32
Setmem 0x48000024 0x008E0459 32
Setmem 0x48000028 0x00000032 32
Setmem 0x4800002C 0x00000030 32
Setmem 0x48000030 0x00000030 32
下面是简单的注释说明:
setmem”命令表示设置某个值到某个地址上,而“mem”命令表示从某个地址读一个值并打印出来。
通过这两条命令,可以设置ARM内部的寄存器,也可以读出寄存器的值。
命令地址值长度
Setmem 0x53000000 0x00000000 32 //WTCON 看门狗定时器模式
Setmem 0x4A000008 0xFFFFFFFF 32 //中断屏蔽
Setmem 0x4A00001C 0x000007FF 32 //中断次级屏蔽
Setmem 0x53000000 0x00000000 32 //看门狗定时器控制寄存器
Setmem 0x56000050 0x000055AA 32 //GPFCON配置端口 F 的引脚
Setmem 0x4C000014 0x00000007 32 //时钟分频控制
Setmem 0x4C000000 0x00FFFFFF 32 //PLL 锁定时间计数寄存器
Setmem 0x4C000004 0x00061012 32 //MPLL 配置寄存器
Setmem 0x4C000008 0x00040042 32 //UPLL 配置寄存器
Setmem 0x48000000 0x22111120 32 //总线宽度和等待状态控制
Setmem 0x48000004 0x00002F50 32 //启动 ROM 控制
Setmem 0x4800000C 0x00000700 32 //BANK2 控制
Setmem 0x48000010 0x00000700 32 //BANK3 控制
Setmem 0x48000014 0x00000700 32 //BANK4 控制
Setmem 0x48000018 0x0007FFFC 32 //BANK5 控制
Setmem 0x4800001C 0x00018005 32 //BANK6 控制
Setmem 0x48000020 0x00018005 32 //BANK7 控制
Setmem 0x48000024 0x008E0459 32 //DRAM/SDRAM 刷新控制
Setmem 0x48000028 0x00000032 32 //可变 Bank 大小
Setmem 0x4800002C 0x00000030 32 //SDRAM BANK6 的模式寄存器设置Setmem 0x48000030 0x00000030 32 //SDRAM BANK7 的模式寄存器设置。