IAR430头文件
- 格式:doc
- 大小:153.00 KB
- 文档页数:26
Keil中头文件很重要,对于51单片机常使用reg51.h、reg52.h或AT89x51.h。
在:目标盘X:/keil/C51/INC 文件夹里。
INC文件夹根目录里就有不少头文件,并且里面还有很多以公司分类的文件夹,里面也都是相关产品的头文件。
我打开Atmel文件夹,看到相当多的头文件,其中包括reg51.h,也有AT89x51.h。
我把AT89x51.h头文件拷贝到INC根目录里面,再编译程序发现AT89x51.h可以使用了。
原来Keil提供了足够的头文件,我们使用的时候只需把对应头文件拷贝到INC文件夹里就可以了。
我把宏晶公司提供的STC单片机的头文件STC89C51RD_RC.h拷贝到INC文件夹里也可以正常使用。
在INC文件夹里还有dallas的单片机DS89C4xx系列单片机的头文件DS89C4xx.h,大家使用时直接拷贝出来调用就可以了。
还有dallas的单片机DS89C4xx系列单片机的头文件DS89C4xx.h,大家使用时直接拷贝出来调用就可以了。
/********************************************************* 文件名称:* IIC.c* 文件说明:* 使用口线模拟IIC* 程序使用波特率为2400,程序运行时需要在pc机上使用一个串口* 接收发送程序,任意发送字符,接收的字符为十六进制时间数据* MSP-FET430P149 Demo - Basic Clock, MCLK Sourced from HF XTAL XT2* L.TCH* Feb 2007* Built with IAR Embedded Workbench Version: 3.10A*******************************************************//*********************************************************/#include <MSP430X14X.h>/********************************************************** 定义*********************************************************/#define RST BIT7#define SDA BIT6#define SCLK BIT5char pbuf[7];char clok[7]={0x16,0x15,0x14,0x13,0x12,0x04,0x07};char cbuf;char bbuf;char *pda;char *pck;char *prg;/************************************************说明************************************************/void Port_Init(void);void Init_CLK(void);void Init_UART0(void);void RST_Enable(void);void RST_Disable(void);void SCLK_HI(void);void SCLK_LO(void);void WriteByte(char nVal);char ReadByte(void);void WriteTo1302(char nAddr, char nVal);char ReadFrom1302(char nAddr);void BurstWriteTime(char *pWClock);void BurstReadTime(char *pRClock);void BurstWriteRam(char *pWReg);void BurstReadRam(char *pRReg);void SetTime(char *pClock);void GetTime(char pTime[]);/***********************************************/void Port_Init(void){P1DIR |= RST; //设置CE为输出管脚P1DIR |= RST; //设置SCLK为输出管脚P1DIR |= SCLK;P2DIR |= 0x02; // Set P2.1 to output directionreturn;}void Init_CLK(void){unsigned int i;BCSCTL1 = 0X00; //将寄存器的内容清零//XT2震荡器开启//LFTX1工作在低频模式//ACLK的分频因子为1do{IFG1 &= ~OFIFG; // 清除OSCFault标志for (i = 0xFF; i > 0; i--);}while ((IFG1 & OFIFG) == OFIFG); // 如果OSCFault =1BCSCTL1 &= ~(XT2OFF + XTS); //open XT2, LFTX2 select low frequency //BCSCTL1 |= RSEL0 + RSEL1 + RSEL2; //DCO Rsel=7(Freq=3200k/25摄氏度)//BCSCTL1 |= 0x07;BCSCTL2 += SELM1; //MCLK的时钟源为TX2CLK,分频因子为1BCSCTL2 += SELS; //SMCLK的时钟源为TX2CLK,分频因子为1return;}void Init_UART0(void){U0CTL = 0X00; //将寄存器的内容清零UCTL0|=SWRST;P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXDME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD UCTL0 |= CHAR; // 8-bit characterUTCTL0 |= SSEL1; // UCLK = SMCLKUBR00 = 0xD3; // 3.58Mhz/2400 -1491UBR10 = 0x05; //UMCTL0 = 0x00; // no modulationUCTL0 &= ~SWRST; // Initialize USART state machine IE1 |= URXIE0; // Enable USART0 RX interruptIE1 &= ~UTXIE0; // Disable USART TX interrupt return;}void RST_Enable(void){P1OUT |= RST;return;}void RST_Disable(void){P1OUT &= ~(RST);return;}void SCLK_HI(void){P1OUT |= SCLK;return;}void SCLK_LO(void){P1OUT &= ~(SCLK);return;}/*-------------------------------* 功能: 写入1Byte数据* 调用:* 输入: nVal 写入的数据* 返回值: 无*------------------------------*/void WriteByte(char nVal){char i,j;char nTemp = nV al;char nSend;P1DIR |= SDA; //设置DATA为输出管脚_NOP();_NOP();_NOP();_NOP();for(i = 0; i < 8; i++) //发8位,从0位开始{nSend = (nTemp & 0x01);if(nSend == 1){P1OUT |= SDA;}else{P1OUT &= ~(SDA);}SCLK_HI();for(j = 10;j > 0;j--) ;SCLK_LO();for(j = 10;j > 0;j--) ;nTemp >>= 1; //从0位开始,发8位}return;}/*--------------------------------------* 功能: 读取1Byte数据* 调用:* 输入:* 返回值: nTemp*------------------------------------*/char ReadByte(void){char nTemp = 0;int i;int j;P1DIR &=~SDA; //设置DATA为输入管脚_NOP();_NOP();_NOP();_NOP();for(i = 0; i < 8; i++) //接受8位{SCLK_HI();for(j = 10;j > 0;j--);SCLK_LO();_NOP();_NOP();if(P1IN & SDA) //如果第i位是高电平置1{nTemp |= (0x01 << i);}for(j = 10;j > 0;j--);}return nTemp;}/*-----------------------------------------* 功能: 往DS1302写入1Byte数据* 调用:* 输入: nVal 写入的数据* 返回值: 无*------------------------------------------*/void WriteTo1302(char nAddr, char nVal){RST_Disable();SCLK_LO();RST_Enable();_NOP();_NOP();_NOP();_NOP();WriteByte(nAddr); //地址,命令WriteByte(nVal); //写1Byte数据SCLK_HI();RST_Disable();return;}/*-----------------------------------------* 功能: 从DS1302读取1Byte数据* 调用:* 输入:* 返回值: nDta*-----------------------------------------*/char ReadFrom1302(char nAddr){char nData;RST_Disable();SCLK_LO();RST_Enable();_NOP();_NOP();_NOP();_NOP();WriteByte(nAddr); //地址,命令nData = ReadByte(); //读1Byte数据SCLK_HI();RST_Disable();cbuf = nData; //return(nData);}/*-------------------------------------* 功能: 往DS1302写入时钟数据(多字节方式)* 调用:* 输入: pClock[]: 时钟数据地址格式为: 秒分时日月星期年控制* 8Byte (BCD码)* 返回值: 无*----------------------------------*/void BurstWriteTime(char *pClock){char i;WriteTo1302(0x8e,0x00); //控制命令,写操作.。
1-问:JTAG 与I/O 功能之间的MSP430 引脚复用答:四个引脚- 在20 与28 引脚MSP430F1xx 器件上均同时具有I/O 与JTAG 功能。
这些引脚的默认功能是,当器件通电时具有I/O 功能。
当测试引脚拉高时,则将这些引脚选为JTAG。
当使用交互式系统内调试程序时,这些器件的FET 会将这些引脚处于JTAG 模式下。
如欲了解有关在使用调试程序时从JTAG 模式发布引脚的信息,敬请参阅《FET 工具用户指南》。
注:如果将外部电路附加到共享引脚上,则必须考虑JTAG 信号对引脚的相互影响。
如果通过JTAG 对该器件进行系统内交互式编程或调试,则需考虑电路将产生的影响。
如果电路将增加共享引脚的负载或偏置,进而干扰JTAG 通信,则应考虑这一点。
更高引脚计数器件具有仅可用于调试与编程的专用JTAG 引脚。
[在使用MSP430 JTAG 的管脚做其它控制应用的时候,要注意,此时会影响到FET 的调试,导致无法下载单片机程序或无法调试,建议引脚足够应用的时候,避开使用JTAG 复用I/O 功能]2-问:MSP430 ADC12 模块的速度答:ADC12 的转换速率是转换所需的ADC12CLK 以及时钟的一项功能。
ADC12CLK 的近似最小值与最大值分别为500kHz 及。
速度最快的整个转换过程可以在17 个周期内完成(13 个周期进行转换,4 个周期进行采样及保持)。
17 = 382ksps。
ADC12 的运行速率不能低于最小值的ADC12CLK,但在软件的控制下,采样门可以无限制保持打开状态。
如欲了解有关采样与转换时间规范的更多详情,敬请参阅数据表。
3-问:MSP430 I/O 引脚的汲极电流与源极电流答:MSP430 未指定来自I/O 引脚的最大绝对电流。
如欲了解V oh 与V ol 的规范,敬请参阅数据表。
其中显示了每个I/O 引脚均可提供几毫安的电流,但输出电压将随着电流的增大而发生变化。
MSP430F552X中文手册及例程(耐心开完,必有收获)一、先写一篇开个头:这样快速闯入MSP430学习过程进入各个电子产品公司的网站,招聘里面嵌入式占据了大半工程师职位。
广义的嵌入式无非几种:传统的什么51单片机、 MSP430称做嵌入式微控制器;ARM是嵌入式微处理器;当然还有DSP;FPGA。
我们现在就不说别的,就说MSP430单片机,多数想学MSP430的童鞋,对89C51内核系列的单片机是很熟悉的,为了加深对MSP430 系列单片机的认识吗,迅速闯入MSP430学习过程,就必须彻底了解MSP430单片机,我们不妨将51单片机和MSP430两者进行一下比较。
第一点, 51内核单片机是8 位单片机。
其指令是采用的被称为“ CISC ”的复杂指令集,共具有111 条指令。
而MSP430 单片机是16 位的单片机,采用了精简指令集( RISC )结构,只有简洁的27 条指令,大量的指令则是模拟指令,众多的寄存器以及片内数据存储器都可参加多种运算。
这些内核指令均为单周期指令,功能强,运行的速度快。
第二点,MCU主要分为两种工作模式:待机与执行。
51内核单片机正常情况下消耗的电流为mA级,在掉电状态下,其耗电电流仍约为3mA左右;即使在掉电方式下,电源电压可以下降到2V ,但是为了保存内部RAM 中的数据,还需要提供约50uA的电流。
而430单片机功耗是在uA级的,工作电流极小,并且超低功耗,关断状态下的电流仅为0.1μA,待机电流为0.8μA,常规模式下的(250μA/1MIPS@3V),端口漏电流不足50 nA,并可零功耗掉电复位(BOR)。
另外,该芯片属低电器件,仅需1.8~3.6V电压供电,因而可有效降低系统功耗。
MSP430将低功耗模式扩展为7种,分别对应不同应用场合及任务的低功耗方式。
以睡眠模式为例,包括深度睡眠模式RTC:只有时钟在跑而其他都不动,目前,TI宣布其MSP430在RTC模式下最低功耗仅为360nA。
Lite FET-Pro430 Elprotronic详细使用方法
1:首先安装Lite FET-Pro430 Elprotronic,点击Setup.exe。
具体如何安装就不做详细介绍,直接下一步到最后。
2:成功安装之后,重启电脑,启动软件,界面如下
图所示:
3:详细介绍配置方法
a:把IAR安装目录下的hil.dll和msp430.dll复制到Lite FET-Pro430 Elprotronic的安装目录下,然后把msp430.dll更改为msp430-TI.dll。
IAR的安装目录:
Lite FET-Pro430的安装目录:
b:Lite FET-Pro430菜单设置
首先打开软件,点击菜单栏的Setup,再选择Connection/Device
Reset,如图所示:
然后自设置图中指示的1处和2处,然后确定。
红色1:一个是JTAG口另一个是Spy Bi Wire接口
红色2:选择USB或者并口
最后回到主界面如下图所示:
红色1:选择要下载的HEX或者TXT,可执行文件红色2:选择要烧录的硬件型号选择
红色3:点击AUTO PROG 下载程序
红色4:程序下载成功后,点击RESET。
项目名称430多功能编程器编制人吴邦米修改人郝强第一部分:概述LSD-PRGS430-IIIA以完成对MSP430FLASH*该脚与BSL 接口引脚兼容。
(四)(四)BSLBSL 目标板接口LSD-PRGS430-IIIA 多功能离线编程器通过BSL 接口,方便将程序写入,也可以将已烧断熔丝的MSP430系列单片机进行重新写入程序。
BSL 接口定义如下:(五)SBW 目标板接口SBW 接口定义如下:对于不同的型号芯片,对于不同的型号芯片,BSLBSL 发送和接收引脚不同,请看相关器件数据手册BSL 部分的说明。
如:F41X 系列P1.0接BTXD,P1.1接BRXD;而F15X,F16X 系列P1.1接BTXD,P2.2接BRXD。
对于未使用的JTAG JTAG,,BSL 引脚引脚,,应为悬空处理,外部不得接入电源应为悬空处理,外部不得接入电源,,避免损坏编程器。
对于RST 复位引脚,应确保在目标板上没有看门狗等复位芯片,否则将造成芯片复位的不正常,引起复位引脚,应确保在目标板上没有看门狗等复位芯片,否则将造成芯片复位的不正常,引起烧烧写失败。
特别注意:LSD-PRGS430-IIIA 多功能离线编程器JTAG 口的2脚,输出的电压为一可调电压DC(1.8V-3.6V),用户的目标板或适配器一般推荐不外加电源,以免损坏编程器。
若使用外加电源,则需要将编程器的VCC 输出关闭。
具体设置可参考第三部分。
引脚1234567891011121314定义TDO VCC TDI VCC_IN TMS NC TCK TST GND NC RST NC TXD*RX D*引脚12345678910定义TXD TCKRXD RST GND VCC TEST VCC_IN NC NC 引脚1234567891011121314定义SBWTDI0VCC NC NC NC NC NC SBWTCK GND NC NC NC NCNC 第三部分:第三部分:指示灯与按键说明指示灯与按键说明指示灯与按键说明::LSD-PRGS430-IIIA 多功能离线编程器有3个指示灯和一个按键:分别为电源指示灯、功能指示灯、状态指示灯与开始按键。
本文给出IAR因版本不兼容打不开IAR工作区遇到的各种问题及解决方法,包括依据提示修改版本,删除未知名称(ewp文件)。
若还没解决,则创建新工作区、工程,并拷贝相关文件,我想这是一种通用化的解决方法(很诡异)。
PS:本文以IAR工程项目ContikiCC2530Port为例,IAR for MCS-51版本是7.51A。
本文记录了整个调试过程,实际场景,不妨先跳到第三部分,看行不行,不行的话,再按第二部分修改。
一、IAR错误提示昨天,在GitHub下载了一个IAR工程项目ContikiCC2530Port,打开*.eww文件出现一系列错误,如下:1.1 Broken options were detected in the project file.A backup copy will be made.图1 IAR警告Broken options1.2 The project file * was created by a newer version of project and cannot be opened图2 IAR警告created by a newer version1.3 The project * could not be open图3 IAR警告could not be openBuild区域显示如下信息:LOAD: Configuration 'ContikiBankedRelease' in the project 'ContikiCC253xProj' contains broken options for tool 'General': The format of this file is not supported by this version of the workbench.It appears to have been written by a newer version of the workbench. Diagnostics: 'Settings 'General': unsupported version - '.Options for 'General' will be set to default. Creating backup of original project file.LOAD: Configuration 'ContikiBankedRelease' in the project 'ContikiCC253xProj' contains broken options for tool 'ICC8051': (Registry: unknown name: CompilerMisraRules04)Options for 'ICC8051' will be set to default.LOAD: Configuration 'ContikiBankedRelease' in the project 'ContikiCC253xProj' contains broken options for tool 'XLINK': The format of this file is not supported by this version of the workbench. It appears to have been written by a newer version of the workbench.Diagnostics: 'Settings 'XLINK': unsupported version - '.Options for 'XLINK' will be set to default.如下图所示:图4 IAR log windows信息初步断定,这些警告是因为IAR版本不兼容引起的,但事实上没那么简单,之前也遇见用新版本IAR打开旧版本IAR工程文件,可以直接打开(给出提示信息),在这里还涉及到工程项目配置。
提纲:一.MSP-EXP430G2套件介绍1.包装清单unchPad简介(430文件夹_用户指南)(一)LaunchPad片上资源(1)开发板硬件简介(2)主要功能模块(二)LaunchPad特性(三)LaunchPad电路图(主要参考【LaunchPad】开发板介绍.pdf)3.MSP430G2553数据资料(技术资料汇总_G2553中文资料.pdf)4.安装MSP-EXP430G2 LaunchPad二.编译部分1.编译工具的选择2.编译工具的安装(根据安装提示便可)3.程序编译、烧录流程4.编程规则(MSP430 编程规则.pdf)三.基础程序部分1.功能模块程序(MSP430G2xx3 Code Examples文件夹)2.基础应用程序(例程代码)四.应用举例——MSP430G2452内置温度传感器温度检测五.LaunchPad扩展部分1.eZ430连接、编程要点2.与卫星板的连接3.与LaunchPad兼容的MSP430器件一.MSP-EXP430G2套件介绍1.包装清单:⏹LaunchPad目标板(附一个烧好测温实验例程的MPS430G2553)⏹MPS4302452一个——具有8通道10位ADC、片上比较器、触控式I/O、通用串行接口、8Kb闪存、256字节SRAM的低功耗16位MSP430微控制器⏹32.768KHz时钟晶振⏹0.5m长的USB-B线缆⏹插座式10引脚印刷板连接线两个⏹LaunchPad贴签两个⏹快速启动指南unchPad简介(一)LaunchPad片上资源(1)开发板硬件介绍:板上材料清单开发板指示图(2)主要功能模块:⏹复位模块⏹时钟模块⏹I/O端口模块;⏹WDT看门狗模块;⏹Timer A定时器模块⏹比较器A模块⏹ADC10数模转换模块⏹USART串行异步通讯模块⏹CPU模块(二)LaunchPad特性⏹实验班成本低、低功耗⏹USB调试与编程接口无需驱动即可安装使用,且具备高达9600波特的UART串行通信速度⏹支持所有采用PDIP14或PDIP20封装的MSP430G2XX和MSP430F20XX器件⏹分别连接至绿光和红光LED的两个通用数字I/O口引脚可提供视觉反馈⏹两个按钮可实现用户反馈和芯片复位⏹器件引脚可通过插座引出,既可以方便的用于调试,也可用来添加定制的扩展板⏹高质量的20引脚DIP插座,可轻松简便地插入目标器件或将其移除(三)LaunchPad电路图LaunchPad原理图见“【LaunchPad】开发板介绍.pdf”。
段式液晶/** main.c*/#include <msp430f6638.h>#include <stdint.h>#include <stdio.h>#include <string.h>#include "dr_lcdseg.h" //调用段式液晶驱动头文件#define XT2_FREQ 4000000#define MCLK_FREQ 16000000#define SMCLK_FREQ 4000000void initClock(){while(BAKCTL & LOCKIO) //解锁XT1引脚操作BAKCTL &= ~(LOCKIO);UCSCTL6 &= ~XT1OFF; //启动XT1,选择内部时钟源P7SEL |= BIT2 + BIT3; //XT2引脚功能选择UCSCTL6 &= ~XT2OFF; //启动XT2while (SFRIFG1 & OFIFG) //等待XT1、XT2与DCO稳定{UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG);SFRIFG1 &= ~OFIFG;}UCSCTL4 = SELA__XT1CLK + SELS__XT2CLK + SELM__XT2CLK; //避免DCO调整中跑飞UCSCTL1 = DCORSEL_5; //6000kHz~23.7MHzUCSCTL2 = MCLK_FREQ / (XT2_FREQ / 16); //XT2频率较高,分频后作为基准可获得更高的精度UCSCTL3 = SELREF__XT2CLK + FLLREFDIV__16; //XT2进行16分频后作为基准while (SFRIFG1 & OFIFG) //等待XT1、XT2与DCO稳定{UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG);SFRIFG1 &= ~OFIFG;}UCSCTL5 = DIVA__1 + DIVS__1 + DIVM__1; //设定几个CLK的分频UCSCTL4 = SELA__XT1CLK + SELS__XT2CLK + SELM__DCOCLK; //设定几个CLK的时钟源}void main(void){unsigned char i,num1;int32_t num2;WDTCTL = WDTPW | WDTHOLD; // 停止看门狗initClock(); //配置系统时钟initLcdSeg(); //初始化段式液晶while(1) //进入程序主循环{for(i=0;i<6;i++){for(num1=0;num1<10;num1++){LCDSEG_SetDigit(i,num1); //在段式液晶的第i位上显示数字num1__delay_cycles(MCLK_FREQ/5); //延时200msLCDSEG_SetDigit(i,-1); //清除在段式液晶上显示的第i位数字}}for(num2=111111;num2<1000000;num2=num2+111111){LCDSEG_DisplayNumber(num2,0); //显示六位数,从111111-999999__delay_cycles(MCLK_FREQ/2); //延时500ms}for(i=0;i<6;i++)LCDSEG_SetDigit(i,-1); //段式液晶清屏__delay_cycles(MCLK_FREQ); //延时1000ms}}中断/** main.c*/#include <msp430f6638.h>void main(void){WDTCTL = WDTPW + WDTHOLD; //关闭看门狗P4DIR |= BIT5; //设置P4.5口方向为输出P4DIR &= ~BIT0;P4REN |= BIT0; //使能P4.0上拉电阻P4OUT |= BIT0; //P4.0口置高电平P4IES |= BIT0; //中断沿设置(下降沿触发) P4IFG &= ~BIT0; //清P4.0中断标志P4IE |= BIT0; //使能P4.0口中断__bis_SR_register(LPM4_bits + GIE); //进入低功耗模式4 开中断 __no_operation(); //空操作}// P4中断函数#pragma vector=PORT4_VECTOR__interrupt void Port_4(void){P4OUT ^= BIT5; //改变LED5灯状态P4IFG &= ~BIT0; //清P4.0中断标志位}RTC_LCD#include <msp430f6638.h>#include <stdint.h>#include <stdio.h>#include <string.h>#include "dr_lcdseg.h"#define XT2_FREQ 4000000#define MCLK_FREQ 16000000#define SMCLK_FREQ 4000000typedef struct{const volatile uint8_t* PxIN;volatile uint8_t* PxOUT;volatile uint8_t* PxDIR;volatile uint8_t* PxREN;volatile uint8_t* PxSEL;} GPIO_TypeDef;const GPIO_TypeDef GPIO4 ={&P4IN, &P4OUT, &P4DIR, &P4REN, &P4SEL};unsigned int hourBCD=0;unsigned int minuteBCD=0;unsigned int secondBCD=0;unsigned int show=0;void initClock(){while(BAKCTL & LOCKIO) // Unlock XT1 pins for operationBAKCTL &= ~(LOCKIO);UCSCTL6 &= ~XT1OFF; //启动XT1P7SEL |= BIT2 + BIT3; //XT2引脚功能选择UCSCTL6 &= ~XT2OFF; //启动XT2while (SFRIFG1 & OFIFG) { //等待XT1、XT2与DCO稳定UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG);SFRIFG1 &= ~OFIFG;}UCSCTL4 = SELA__XT1CLK + SELS__XT2CLK + SELM__XT2CLK; //避免DCO调整中跑飞UCSCTL1 = DCORSEL_5; //6000kHz~23.7MHzUCSCTL2 = MCLK_FREQ / (XT2_FREQ / 16); //XT2频率较高,分频后作为基准可获得更高的精度UCSCTL3 = SELREF__XT2CLK + FLLREFDIV__16; //XT2进行16分频后作为基准while (SFRIFG1 & OFIFG) { //等待XT1、XT2与DCO稳定UCSCTL7 &= ~(DCOFFG+XT1LFOFFG+XT2OFFG);SFRIFG1 &= ~OFIFG;}UCSCTL5 = DIVA__1 + DIVS__1 + DIVM__1; //设定几个CLK的分频UCSCTL4 = SELA__XT1CLK + SELS__XT2CLK + SELM__DCOCLK; //设定几个CLK的时钟源}void SetupRTC(void){RTCCTL01 |= RTCBCD + RTCHOLD; //数据格式为BCD码RTCHOUR = 0x00;RTCMIN = 0x00;RTCSEC = 0x00;RTCCTL0 |= RTCRDYIE; // RTCRDY中断使能}void main(void){WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timerinitClock();initLcdSeg();SetupRTC(); //初始化RTCP4DIR &=~0x1F;P4REN |= 0x1F; //使能按键端口上的上下拉电阻P4OUT |= 0x1F; //上拉状态P4IE |= 0xFF;P1IES |= 0x1F;P1IFG &= ~0x1F;_EINT();LCDSEG_DisplayNumber(show, 0);LPM3;}#pragma vector=RTC_VECTOR__interrupt void RTC_ISR(void){switch (__even_in_range(RTCIV, RTC_RT1PSIFG)){case RTC_NONE: break;case RTC_RTCRDYIFG:hourBCD = (RTCHOUR>>4)*10+(RTCHOUR&0x0f); //获取小时数据minuteBCD = (RTCMIN>>4)*10+(RTCMIN&0x0f); //获取分钟数据secondBCD = (RTCSEC>>4)*10+(RTCSEC&0x0f); //获取秒数据show=hourBCD*10000+minuteBCD*100+secondBCD;//变换为显示数据 if(minuteBCD>0)LCDSEG_DisplayNumber(show, 2); //显示(有分钟时显示小数点) elseLCDSEG_DisplayNumber(show, 0);//显示(无小数点)break;case RTC_RTCTEVIFG:break;case RTC_RTCAIFG: break;case RTC_RT0PSIFG:break; //分频器 0case RTC_RT1PSIFG: break; // 分频器 1default: break;}__no_operation();}#pragma vector=PORT4_VECTOR__interrupt void Port_4(void){if(P4IFG&0x1F){switch(P4IFG&0x1F){case 0x01: //S7RTCCTL01 &= ~RTCHOLD;break;case 0x02: //S6break;case 0x04: //S5RTCCTL01 |= RTCHOLD;break;case 0x08: //S4break;case 0x10: //S3RTCCTL01 |= RTCHOLD;RTCHOUR = 0x00;RTCMIN = 0x00;RTCSEC = 0x00;show=0;LCDSEG_DisplayNumber(show, 0);break;default:break;}P4IFG&= ~0x1F;}}。
ARM开发和调试工具的使用(IAR EWARM和H-JTAG/J-LINK)上海工程技术大学电子电气工程学院目录1 创建一个IAR工程 (3)2 编译和链接一个IAR工程 (5)2.1 General Options设置 (5)2.2 C/C++ Compiler设置 (7)2.3 Linker设置 (8)2.4 Output Converter设置 (8)2.5 开始编译和链接并生成可下载的输出文件 (10)3 使用C-SPY进行调试和分析 (11)3.1 软件仿真调试(中断模拟) (11)3.2 使用H-JTAG仿真调试(RAM∕ROM) (13)3.3 使用J-LINK仿真调试(RAM∕ROM) (18)3.4 应用程序分析 (19)4 将可执行二进制文件下载到片内FLASH (22)4.1 使用H-JTAG下载(H-Flasher) (22)4.2 使用J-LINK下载(J-Link ARM) (23)4.3 使用CPU自带的ISP 功能下载 (24)4.4 使用CPU自带的IAP 功能下载 (24)5 附录一:IAR中的中断处理 (25)5.1 向量IRQ中断(ARM7) (26)5.2 非向量IRQ中断(ARM7) (27)5.3 FIQ 中断(ARM7) (27)6 附录二:IAR中C与汇编的混合编程 (28)6.1 C 语言本征函数 (28)6.2 汇编语言程序 (28)6.3 内联汇编 (29)7 附录三:H-JTAG和J-LINK的比较 (30)8 参考文献 (31)1 创建一个IAR工程1.1 打开IAR开发环境“开始”→“程序”→“IAR Systems”→“IAR Embedded Workbench for ARM 5.50 Evaluation”→“IAR Embedded Workbench”1.2 新建一个工作区这步可选,但最好新建一个专用的目录,用来存放自己工程文件,“File”→“New”→“Workspace”:.eww1.3 新建一个IAR空工程“Project”→“Create New Project”:.ewp1.4 新建文件并保存“File”→“New”→“File”“File”→“Save”1.5 为IAR工程添加已有文件“Project”→“Add Files”2 编译和链接一个IAR工程在工作区窗口选中工程文件夹test-Debug,然后“Project”→“Options…”,弹出对话框:2.1 General Option选中该对话框左侧Category列表框中“General Option”,并对右侧对应的选项卡中的内容作以下设置:选项卡设置Target Core:ARM7TDMI-S/Cortex-M3Device:NXP LPC21xx/ST STM32F10xxBOutput OutputOutput Directories:…Library Configuration Library low-level interface implementation:Semihosted1 、目标板上MCU是LPC2103(ARM7TDMI):2 、目标板上MCU是STM32(Cortex-M3):2.2 C/C++ Compiler1 、目标板上MCU是LPC2103(ARM7TDMI):选中该对话框左侧Category列表框中“C/C++ Compiler”,并对右侧对应的选项卡中的内容作以下设置:2 、目标板上MCU是STM32(Cortex-M3):选中该对话框左侧Category列表框中“C/C++ Compiler”,并对右侧对应的选项卡中的内容作以下设置:2.3 Output Converter设置选中该对话框左侧Category列表框中“Output Converter”,并对右侧对应的选项卡中的内容作以下设置:选项卡设置Output Generate Additional Output(Override Default) Output Format:Intel Extended2.4 Linker设置1 、IAR EWARM 4且目标板上MCU是LPC2103(ARM7TDMI):在工作区窗口选中工程文件夹test-Debug,然后“Project”→“Options…”,弹出对话框,并选中该对话框左侧Category列表框中“Linker”,对右侧对应的选项卡中的内容作以下设置:选项卡设置Config Linker Configuration File:(Override Default) $PROJ_DIR$\LPC2103_ROM.xclList Generate Linker Map File2 、IAR EWARM 5且目标板上MCU是STM32(Cortex-M3):在工作区窗口选中工程文件夹test-Debug,然后“Project”→“Options…”,弹出对话框,并选中该对话框左侧Category列表框中“Linker”,对右侧对应的选项卡中的内容作以下设置:选项卡设置Config Linker Configuration File:(Override Default) $PROJ_DIR$\stm32f10x_flash.icfList Generate Linker Map File点击“Linker Configuration File”下“Edit…”按键,打开“Linker Configuration ”对话框,选择不同的选项卡,可分别查看和设置中断向量表(Vector Table)、存储器地址分配(RAM和ROM)以及堆和栈的大小(Heap Size和Stack Size),具体设置如下图所示。
IAR_C介绍3.2IAR C安装与使⽤IAR C语⾔开发软件由IAR公司开发的第三⽅MSP430开发环境,有30天试⽤版与4K容量限制的DEMO版本。
是⼀个新的专业化集成开发环境,⽤来编辑,编译和调试Windows9x/NT/2000/XP环境下的MSP430应⽤程序。
还包含⼀个汇编器和⼀个仿真器。
IAR Embedded Workbench(简称EW)IAR EW的C/EC++交叉编译器和调试器是今天世界最完整的和最容易使⽤专业嵌⼊式应⽤开发⼯具。
EW对不同的微处理器提供⼀样直观⽤户界⾯。
EW包括:嵌⼊式C/C++优化编译器,汇编器,连接定位器,库管理员,编辑器,项⽬管理器和C-SPY调试器中。
使⽤IAR的编译器最优化最紧凑的代码,节省硬件资源,最⼤限度地降低产品成本,提⾼产品竞争⼒。
其中最⼴泛使⽤的有EWARM, EWAVR和EW430.找到IAR软件EW430_310的⼦⽬录,双击autorun.exe,开始安装EW430_310,如图3-21所⽰,安装路径可以按默认的。
图3-21 IAR软件EW430_310的⼦⽬录将软件中crack⼦⽬录下图3-22的软件拷贝到安装软件图3-23的bin⽬录下,运⾏crack ,回答y即可图3-22 软件中crack⼦⽬录新型C/C++⼯具包 3.10版的集成开发环境IAR Embedded Workbench具有内嵌C++扩展功能,⽀持在模板和标准模板库(STL)内嵌C++功能,包括模板、命名空间、可变符号、static-cast(类型强制转换)、reinterpret-cast(类型强制转换)和const-cast(类型强制转换);新型IDE窗⼝管理具有可停靠窗⼝和多视窗功能;源浏览器可对定义和声明进⾏快速导航;IAR C-SPY调试器的STL Container Awareness具有对STL容器内数据类型的码元进⾏总览的功能;IAR C-SPY调试器⽀持全硬件调试;还包括Ready-made ⼯程模板、⾃定义C/内嵌C++库和在线帮助系统。
/******************************************************************** * * Standard register and bit definitions for the Texas Instruments * MSP430 microcontroller. * * This file supports assembler and C development for * MSP430x14x devices. * * Texas Instruments, Version 2.3 * * Rev. 1.2, Additional Timer B bit definitions. * Renamed XTOFF to XT2OFF. * * Rev. 1.3, Removed leading 0 to aviod interpretation as octal * values under C * Included rather than "In430.h" * * Rev. 1.4, Corrected LPMx_EXIT to reference new intrinsic _BIC_SR_IRQ * Changed TAIV and TBIV to be read-only * * Rev. 1.5, Enclose all #define statements with parentheses * * Rev. 1.6, Defined vectors for USART (in addition to UART) * * Rev. 1.7, Added USART special function labels (UxME, UxIE, UxIFG) * * Rev. 2.1, Alignment of defintions in Users Guide and of version numbers * * Rev. 2.2, Fixed type in ADC12 bit definitions (replaced ADC10 with ADC12) * * Rev. 2.3, Removed unused def of TASSEL2 / TBSSEL2 * ********************************************************************/
#ifndef __msp430x14x #define __msp430x14x
#ifdef __IAR_SYSTEMS_ICC__ #ifndef _SYSTEM_BUILD #pragma system_include #endif #endif
#if (((__TID__ >> 8) & 0x7F) != 0x2b) /* 0x2b = 43 dec */ #error MSP430X44X.H file for use with ICC430/A430 only #endif
#ifdef __IAR_SYSTEMS_ICC__ #include #pragma language=extended
#define DEFC(name, address) __no_init volatile unsigned char name @ address; #define DEFW(name, address) __no_init volatile unsigned short name @ address;
#endif /* __IAR_SYSTEMS_ICC__ */
#ifdef __IAR_SYSTEMS_ASM__ #define DEFC(name, address) sfrb name = address; #define DEFW(name, address) sfrw name = address;
#endif /* __IAR_SYSTEMS_ASM__*/ #ifdef __cplusplus #define READ_ONLY #else #define READ_ONLY const #endif
/************************************************************ * STANDARD BITS ************************************************************/
#define BIT0 (0x0001) #define BIT1 (0x0002) #define BIT2 (0x0004) #define BIT3 (0x0008) #define BIT4 (0x0010) #define BIT5 (0x0020) #define BIT6 (0x0040) #define BIT7 (0x0080) #define BIT8 (0x0100) #define BIT9 (0x0200) #define BITA (0x0400) #define BITB (0x0800) #define BITC (0x1000) #define BITD (0x2000) #define BITE (0x4000) #define BITF (0x8000)
/************************************************************ * STATUS REGISTER BITS ************************************************************/
#define C (0x0001) #define Z (0x0002) #define N (0x0004) #define V (0x0100) #define GIE (0x0008) #define CPUOFF (0x0010) #define OSCOFF (0x0020) #define SCG0 (0x0040) #define SCG1 (0x0080)
/* Low Power Modes coded with Bits 4-7 in SR */ #ifndef __IAR_SYSTEMS_ICC /* Begin #defines for assembler */ #define LPM0 (CPUOFF) #define LPM1 (SCG0+CPUOFF) #define LPM2 (SCG1+CPUOFF) #define LPM3 (SCG1+SCG0+CPUOFF) #define LPM4 (SCG1+SCG0+OSCOFF+CPUOFF) /* End #defines for assembler */
#else /* Begin #defines for C */ #define LPM0_bits (CPUOFF) //进入低功耗模式0之后,CPU被关闭,MCLK关闭 #define LPM1_bits (SCG0+CPUOFF) //进入低功耗模式1之后,CPU被关闭,MCLK关闭,直流发生器被禁止 #define LPM2_bits (SCG1+CPUOFF) //进入低功耗模式2之后,CPU被关闭,MCLK关闭,SCLK被禁止 #define LPM3_bits (SCG1+SCG0+CPUOFF) //进入低功耗模式3之后,CPU被关闭,MCLK关闭,直流发生器被禁止,SCLK也被禁止 #define LPM4_bits (SCG1+SCG0+OSCOFF+CPUOFF) //进入低功耗模式4之后,CPU被关闭,MCLK关闭,直流发生器被禁止,SCLK也被禁止,LFXT也被禁止
#include #define LPM0 _BIS_SR(LPM0_bits) /* Enter Low Power Mode 0 */ #define LPM0_EXIT _BIC_SR_IRQ(LPM0_bits) /* Exit Low Power Mode 0 */ #define LPM1 _BIS_SR(LPM1_bits) /* Enter Low Power Mode 1 */ #define LPM1_EXIT _BIC_SR_IRQ(LPM1_bits) /* Exit Low Power Mode 1 */ #define LPM2 _BIS_SR(LPM2_bits) /* Enter Low Power Mode 2 */ #define LPM2_EXIT _BIC_SR_IRQ(LPM2_bits) /* Exit Low Power Mode 2 */ #define LPM3 _BIS_SR(LPM3_bits) /* Enter Low Power Mode 3 */ #define LPM3_EXIT _BIC_SR_IRQ(LPM3_bits) /* Exit Low Power Mode 3 */ #define LPM4 _BIS_SR(LPM4_bits) /* Enter Low Power Mode 4 */ #define LPM4_EXIT _BIC_SR_IRQ(LPM4_bits) /* Exit Low Power Mode 4 */ #endif /* End #defines for C */
/************************************************************ * PERIPHERAL FILE MAP ************************************************************/
/************************************************************ * SPECIAL FUNCTION REGISTER ADDRESSES + CONTROL BITS ************************************************************/
#define IE1_ (0x0000) /* Interrupt Enable 1 */ DEFC( IE1 , IE1_) #define U0IE IE1 /* UART0 Interrupt Enable Register */ #define WDTIE (0x01) #define OFIE (0x02) #define NMIIE (0x10) #define ACCVIE (0x20) #define URXIE0 (0x40) #define UTXIE0 (0x80)