《AVRC编程PPT课件》由会员分享,可在线阅读,更多相关《AVRC编程PPT课件(74页珍藏版)》请在金锄头文库上搜索。
1、 Flash MicrocontrollersAug-99- 1C代码代码测试测试 Flash MicrocontrollersAug-99- 2C 代码测试代码测试9个应用个应用基于客户的代码基于客户的代码没有针对没有针对AVR进行优化进行优化!不同的应用领域不同的应用领域不同的代码级别不同的代码级别各个应用使用的字节数各个应用使用的字节数结果分析结果分析归一化的累加结果归一化的累加结果平均归一化结果平均归一化结果 Flash MicrocontrollersAug-99- 3注注 释释加入更多的加入更多的 8-bit MCU提高提高benchmark我们的测试代码与我们的测试代码与ANSI
2、相兼容,需要进行修改相兼容,需要进行修改以便适合其他以便适合其他 MCUEDN Benchmark 标准标准只考虑大的只考虑大的MCU当其考虑到当其考虑到8-bit MCU市场时,我们将加入市场时,我们将加入为客户而测试为客户而测试帮助客户减少代码量帮助客户减少代码量 Flash MicrocontrollersAug-99- 4Pager protocol三层协议三层协议包括简单的包括简单的Driver Flash MicrocontrollersAug-99- 5模拟电话模拟电话 ISIM 接口接口, 自动产生的代码自动产生的代码一部分显示一部分显示 driver Flash Microc
3、ontrollersAug-99- 6模拟电话模拟电话 II自动产生的代码自动产生的代码基于状态机基于状态机 Flash MicrocontrollersAug-99- 7Reed-SolomonReed-Solomon Encoder/Decoder Flash MicrocontrollersAug-99- 8汽车无线电应用汽车无线电应用基本应用基本应用流控和位控流控和位控 Flash MicrocontrollersAug-99- 9C Bitfields客户提供的代码客户提供的代码8-,16-bit变量变量 Flash MicrocontrollersAug-99- 10模拟电话模拟电
4、话 III有代表性的几个例程有代表性的几个例程 Flash MicrocontrollersAug-99- 11DES 算法算法加密加密/解密算法解密算法 Flash MicrocontrollersAug-99- 12导航应用导航应用完全的应用完全的应用通讯,测量,计算通讯,测量,计算 Flash MicrocontrollersAug-99- 13所有测试结果的累加所有测试结果的累加按累加字节数进行排序按累加字节数进行排序应用越大,占的比重也越大应用越大,占的比重也越大 Flash MicrocontrollersAug-99- 14归一化的测试结果归一化的测试结果在各个应用中次序的平均值
5、在各个应用中次序的平均值所有的应用都是平等的所有的应用都是平等的 Flash MicrocontrollersAug-99- 15总总 结结9个从不同应用领域抽取的个从不同应用领域抽取的C代码代码Benchmark没有一个没有一个MCU 对所有的应用都是最优对所有的应用都是最优的的在所有应用当中在所有应用当中AVR 名列前矛名列前矛 Flash MicrocontrollersAug-99- 16一个小一个小C函数函数/* Return the maximum value of a table of 16 integers */ int max(int *array) char a; int
6、maximum = -32768; for (a=0;amaximum) maximum = arraya; return (maximum); Flash MicrocontrollersAug-99- 17性能比较(性能比较(1)AT90S8515 8 MHz80C51 24 MHz68HC11A8 12 MHzPIC16C74 20 MHzNormalized figures given in parentheses Flash MicrocontrollersAug-99- 18性能比较(性能比较(2)8 MHz AVR 224 MHz C51HC11:代码效率高,但是处理能力只代码效
7、率高,但是处理能力只有有AVR的的1/10,功耗却高,功耗却高 2.5倍倍PIC 速度快速度快, 但是在相同功耗下但是在相同功耗下AVR性性能比其高能比其高3.5倍倍 Flash MicrocontrollersAug-99- 19What made the AVR do better?极好地支持极好地支持16位数学运算位数学运算 (Zero-Flag 的传输的传输)32个寄存器的存在消除了数据在个寄存器的存在消除了数据在SRAM中的移动中的移动单周期执行单周期执行 Flash MicrocontrollersAug-99- 20使用的编译器使用的编译器AVR: IAR ICCA90 1.40
8、80C51: IAR ICC8051 5.20Thumb: ARM tcc 1.02bARM: ARM armcc 4.66b80196: IAR icc196 5.20aZ80: IAR iccz80 4.03aH8/300(H): IAR icch83 3.22H8/500: IAR icch8500 2.92g68HC11: IAR icc6811 4.20B Flash MicrocontrollersAug-99- 21AVR 支持支持C和高级语言编程和高级语言编程的结构的结构 Flash MicrocontrollersAug-99- 22高级语言高级语言提高了提高了MCU的重要性
9、的重要性上市的时间上市的时间简化维护工作简化维护工作Portability学习时间学习时间可重用性可重用性库库潜在的缺点潜在的缺点代码大小代码大小执行速度执行速度 Flash MicrocontrollersAug-99- 23为什么为什么 AVR适宜用高级语言编程适宜用高级语言编程?Because it was designed for High-Level Languages! Flash MicrocontrollersAug-99- 24IAR对对AVR结构和指令结构和指令集的影响集的影响在结构在结构/指令集确定之前,编译器的开指令集确定之前,编译器的开发就开始了发就开始了潜在的瓶颈得
10、到确认并消除潜在的瓶颈得到确认并消除IAR的反馈在硬件设计上得到了反映的反馈在硬件设计上得到了反映几次循环反复几次循环反复修改后的结果从代码当中可看出来修改后的结果从代码当中可看出来 Flash MicrocontrollersAug-99- 25Memory system32 通用寄存器文件通用寄存器文件数量多数量多直接直接 与与ALU连接连接可保存变量,指针和之可保存变量,指针和之间结果间结果线性程序存储空间线性程序存储空间1KBytes - 8MBytes无需页寻址无需页寻址常数区常数区(SPM可修改可修改)线性数据存储空间线性数据存储空间16 MBytes无需页寻址无需页寻址寄存器寄存
11、器文件文件RAM程序程序 Flash MicrocontrollersAug-99- 26类似与类似与C的寻址模式的寻址模式C 源代码源代码unsigned char *var1, *var2;*var1+ = *-var2;产生的代码产生的代码LDR16,-XSTZ+,R16 Flash MicrocontrollersAug-99- 27带偏移量的间接寻址带偏移量的间接寻址有效访问数组和结构有效访问数组和结构Auto (local variables)放置于软件堆栈之中放置于软件堆栈之中为适应重入的要求,高级语言都基于堆栈结构为适应重入的要求,高级语言都基于堆栈结构 Flash Micro
12、controllersAug-99- 28四种指针四种指针从内存拷贝到内存从内存拷贝到内存最小化指针的反复加最小化指针的反复加载载高功能(高功能(HIGH FUNCTIONALITY) Flash MicrocontrollersAug-99- 2916和和32位支持位支持加法指令加法指令加和减加和减寄存器之间寄存器之间寄存器和立即数之间寄存器和立即数之间Zero标志的传播标志的传播SUB R16,R24SUBI R16,1SBC R17,R25SBCI R17,0所有的跳转都基于最后结果所有的跳转都基于最后结果 Flash MicrocontrollersAug-99- 30两个16位数相减
13、没有没有Zero标志的传播标志的传播R1:R0 - R3:R2 ($E104 - $E101)R1R0E1sub r0,r203 Z0Sbc r1,r30300E104X1错误错误! Flash MicrocontrollersAug-99- 31两个16位数相减有有Zero标志的传播标志的传播R1R0E1sub r0,r203 Z0sbc r1,r303000E104X正确正确!R1:R0 - R3:R2 ($E104 - $E101) Flash MicrocontrollersAug-99- 3216 位指令位指令小数值的加减小数值的加减适合于索引变量和指适合于索引变量和指针操作针操作软
14、件堆栈软件堆栈 Flash MicrocontrollersAug-99- 33Non-destructive comparison带进位比较带进位比较Zero传播传播无需保存结果无需保存结果可使用所有形式的可使用所有形式的跳转跳转CPR16,R24CPCR17,R25CPCR18,R26CPCR19,R27 Flash MicrocontrollersAug-99- 34Switch 支持支持Switches在在CASE语句中经常遇到语句中经常遇到Straight forward approach 效率低效率低间接跳转适合于紧凑的间接跳转适合于紧凑的switch结构结构switch由通用库管
15、理由通用库管理 Flash MicrocontrollersAug-99- 35摘摘 要要AVR结构从一开始就是针对高级语言设计的结构从一开始就是针对高级语言设计的Atmel与与IAR在结构和指令调整上的合作在结构和指令调整上的合作从而编译器可以产生高效的代码从而编译器可以产生高效的代码 Flash MicrocontrollersAug-99- 36减少代码的提示和诀窍减少代码的提示和诀窍Efficient C-coding for AVR Flash MicrocontrollersAug-99- 37 Assembly 与与 C 可以完全控制资源可以完全控制资源在小应用当中可以产生紧凑在
16、小应用当中可以产生紧凑的、高速的代码的、高速的代码在大的应用当中代码效率低在大的应用当中代码效率低可读性差(可读性差(Cryptic code)不好维护不好维护不易移植(不易移植(Non-portable)对资源的控制有限对资源的控制有限在小应中产生的代码量大,在小应中产生的代码量大,执行速度慢执行速度慢在大的应用当中代码效率高在大的应用当中代码效率高结构化的代码结构化的代码容易维护容易维护容易移植容易移植 Flash MicrocontrollersAug-99- 38访问访问 I/O读读I/O:temp = PIND;IN R16,LOW(16)写写I/O:TCCR0 = 0x4F;LDI
17、 R16,79OUT LOW(51),R16 Flash MicrocontrollersAug-99- 39AVR I/O 内存映像内存映像0x000x1F0x3FSBI,CBISBIC, SBISIN, OUT Flash MicrocontrollersAug-99- 40I/O的位设置与清除的位设置与清除地址小于地址小于0x1F的的I/O:PORTB |= (1PIND2);SBI LOW(24),LOW(2)ADCSR &= (1ADEN);CBI LOW(6),LOW(7)地址高于地址高于0x1F的的I/O:TCCR0 &= (0x80);IN R16,LOW(51)ANDI R1
18、6,LOW(127)OUT LOW(51),R16 Flash MicrocontrollersAug-99- 41测试测试I/O的单个位的单个位等待地址低于等待地址低于0x1F的单个位的清除的单个位的清除while(PIND & (1PIND6);SBIC LOW(16),LOW(6)RJMP ?0002等待地址高于等待地址高于0x1F的单个位的设置的单个位的设置while(!(TIFR & (1sec+; temp-min+; temp-t_count+; Flash MicrocontrollersAug-99- 46带参数的函数调用带参数的函数调用使用参数将数据传递到函数中去使用参数将
19、数据传递到函数中去char add(char number1, char number2)return number1+number2;函数间参数的传递通过函数间参数的传递通过R16-R23来实现来实现 Flash MicrocontrollersAug-99- 47循循 环环死循环死循环for(; ;) 循环循环char counter = 100;do while(-counter) ;预减变量(预减变量(Pre-decrement)代码效率最高代码效率最高 Flash MicrocontrollersAug-99- 48优化代码的选项优化代码的选项代码大小优化编译代码大小优化编译使用局部
20、变量使用局部变量使用允许的最小数据类型使用允许的最小数据类型将全局变量收集到结构中去将全局变量收集到结构中去死循环使用死循环使用for(;)使用预减的使用预减的do while; Flash MicrocontrollersAug-99- 49C Programming for the AVR Flash MicrocontrollersAug-99- 50内内 容容安装必须的工具安装必须的工具C编译的介绍编译的介绍练习练习 Flash MicrocontrollersAug-99- 51边学边做边学边做用用C编程编程设置编译和链接文件设置编译和链接文件用用C访问外围访问外围中断处理中断处理高
21、级调试高级调试使用不同的使用不同的AVR外围外围定时器定时器/计数器计数器UART外部中断外部中断 Flash MicrocontrollersAug-99- 52Tool flow器件器件: AT90S8535C Compiler AVR studio 仿真仿真STK200 测试代码测试代码测试程序测试程序: 死循环死循环读读 Port D的值的值 (按键,输入口按键,输入口)将其值写到将其值写到 Port B (LED, 输出口输出口) Flash MicrocontrollersAug-99- 53 测试程序测试程序#include /* 定义定义 AT90S8515 */void ma
22、in(void)char c;DDRB = 0xFF; /* PortB all outputs */ for(;) /* Eternal loop */ c = PIND; /* Read Port D */ PORTB = c; /* 回写到回写到 Port B */ Flash MicrocontrollersAug-99- 54安装安装C编译器编译器Compiler delivered on CD-ROM安装安装Dongle驱动器(见驱动器(见“DONGLE.TXT” ) Flash MicrocontrollersAug-99- 55设置设置 C 编译器编译器启动启动 IAR Emb
23、edded Workbench创建新工程创建新工程File - New - Project: Flash MicrocontrollersAug-99- 56设置编译器选项设置编译器选项Project - Options Flash MicrocontrollersAug-99- 57设置编译器选项设置编译器选项设置链接器文件设置链接器文件 Flash MicrocontrollersAug-99- 58设置编译器选项设置编译器选项选择选择 “Release”选择处理器配置及内存模式选择处理器配置及内存模式 Flash MicrocontrollersAug-99- 59设置设置 C 编译器编
24、译器设定设定 “intel-extended” 为输出格式为输出格式 (release only) Flash MicrocontrollersAug-99- 60设置设置 C 编译器编译器将文件加入到工程将文件加入到工程 - Project - Files . Flash MicrocontrollersAug-99- 61设置设置 C 编译器编译器设定设定 “Debug” 为当前配置为当前配置 “Make” the program:Project - MakePress F9Toolbutton带调试信息的可执行文件在带调试信息的可执行文件在DEBUGEXE目录目录 Flash Micro
25、controllersAug-99- 62使用使用AVR Studio启动启动AVR Studio加载调试文件加载调试文件 (TestProg.d90) - File - Open选择选择AT90S8515 (只需在开始时选择一次只需在开始时选择一次)加入视图(加入视图(VIEW)I/O (PinB, PortD)ProcessorWatchcPORTBPIND单步执行单步执行, Toggle PIND bits Flash MicrocontrollersAug-99- 63 Flash MicrocontrollersAug-99- 64对器件编程对器件编程设定设定 “Release” 为
26、当前配置为当前配置 “Make” the program:Project - MakePress F9Toolbutton可执行程序位于可执行程序位于 RELEASEEXE 目录目录 Flash MicrocontrollersAug-99- 65设置设置 AVR ISP启动启动 Atmel AVR ISP 软件软件Make a new projectProject - New Project:选择选择 AT90S/LS8535加入加入 Title, Project-ID 和和 Comments Flash MicrocontrollersAug-99- 66设置设置 AVR ISP选择编程窗
27、口选择编程窗口加载加载Intel-Hex文件文件(TestProg.hex) - File - Load 对器件编程对器件编程Program - AutoprogramF5Pushbutton测试应用程序测试应用程序 Flash MicrocontrollersAug-99- 67 Flash MicrocontrollersAug-99- 68Main函数函数“main” 是所有是所有C程序的入口点程序的入口点不要加入参数,也不要返回值不要加入参数,也不要返回值语法语法:void main(void)/* 代码代码 */ Flash MicrocontrollersAug-99- 69访问外
28、围访问外围所有所有I/O寄存器在头文件里都被定义为特殊功能寄寄存器在头文件里都被定义为特殊功能寄存器存器象普通变量一样访问象普通变量一样访问#include /* 定义定义 8515 */void main(void) DDRD = 0xFF; /* Port D 输出输出 */ Flash MicrocontrollersAug-99- 70例例 1: 读读/写口写口#include /* 定义定义 AT90S8515 */void main(void)char c;DDRB = 0xFF; /* PortB 输出输出 */ for(;) /* 死循环死循环 */ c = PIND; /*
29、读读 Port D */ PORTB = c; /* 回写到回写到 Port B */ Flash MicrocontrollersAug-99- 71例例 2: 延时函数延时函数#include /* 定义定义 8515 */void delay(unsigned int delayValue) unsigned int i; for(i=0;idelayValue;i+) /* 循环循环 */; /* Do nothing */ Flash MicrocontrollersAug-99- 72Example 2 Continuedvoid main(void)unsigned char r
30、unner = 0x01; DDRB = 0xff; /* Port B 输出输出 */ for (;) /* 死循环死循环 */ if (runner) runner = 1; else runner = 0x01; PORTB = runner; /* 设置设置 LED */ delay(100); /* 调用延时函数调用延时函数 */ Flash MicrocontrollersAug-99- 73例例 3: 读读/写写 EEPROM/* 利用利用IAR标准标准I/O函数来读函数来读/写写 EEPROM */#include #include void main(void)char temp = 0; _EEPUT(0x10,temp);/* 写写EEPROM 地址:地址:0x10 */ _EEGET(temp,0x10);/* 读读EEPROM 地址:地址: 0x10 */个人观点供参考,欢迎讨论