ImageVerifierCode 换一换
格式:DOCX , 页数:120 ,大小:469.42KB ,
资源ID:7043212      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7043212.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(关于lm3s811代码全解析.docx)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

关于lm3s811代码全解析.docx

1、 *注:未指明返回值的函数为无返回值,资源来自周立功单片机网站 一:GPIO函数 1: void GPIODirModeSet(unsigned long ulPort, unsigned char ucPins, unsigned long ulPinIO) 设置所选GPIO端口指定管脚的方向和模式 如 GPIODirModeSe(GPIO_PORTA_BASE,GPIO_PIN_2 ,GPIO_DIR_MODE_IN ) 函数设置PA2为输入,但第三个参数为“GPIO_DIR_MODE_HW // 硬件控制”时指此管脚启用第二功能; 2:unsigned long GPIOD

2、irModeGet(unsigned long ulPort, unsigned char ucPin) 获取所选GPIO端口指定管脚的方向和模式 如 unsigned long SetValue=GPIODirModeGet(GPIO_PORTA_BASE,GPIO_PIN_2);返回PA2脚的方向和模式,返回的值为上一个函数第三个参数的取值,分别为 GPIO_DIR_MODE_IN // 输入方向 GPIO_DIR_MODE_OUT // 输出方向 GPIO_DIR_MODE_HW // 硬件控制 3:void GPIOPadConfigSet(unsigned long

3、ulPort, unsigned char ucPins, unsigned long ulStrength, unsigned long ulPadType) 设置所选GPIO端口指定管脚的驱动强度和类型 如 GPIOPadConfigSet(GPIO_PORTA_BASE,GPIO_PIN_2,GPIO_STRENGTH_4MA ,GPIO_PIN_TYPE_STD) 设置PA2脚的驱动强度为4MA的推挽输出; ulStrength:指定输出驱动强度,应当取下列值之一: GPIO_STRENGTH_2MA // 2mA驱动强度 GPIO_STRENGTH_4MA

4、 // 4mA驱动强度 GPIO_STRENGTH_8MA // 8mA驱动强度 GPIO_STRENGTH_8MA_SC // 带转换速率(Slew Rate)控制的8mA驱动 ulPadType:指定管脚类型。应当取下列值之一: GPIO_PIN_TYPE_STD // 推挽 GPIO_PIN_TYPE_STD_WPU // 带弱上拉的推挽 GPIO_PIN_TYPE_STD_WPD // 带弱下拉的推挽 GPIO_PIN_TYPE_OD // 开漏 GPIO_PIN_TYPE_OD_WPU // 带弱上拉的开漏 GPIO_PIN_TYPE_OD_WPD

5、 // 带弱下拉的开漏 GPIO_PIN_TYPE_ANALOG // 模拟比较器 4:void GPIOPadConfigGet(unsigned long ulPort, unsigned char ucPin, unsigned long *pulStrength, unsigned long *pulPadType) 获取所选GPIO端口指定管脚的配置信息 如 GPIOPadConfigGet(GPIO_PORTA_BASE,GPIO_PIN_2,pulStrength,pulPadType);输出驱动强度信息保存到pulStrength指向的地址中,输出驱动类型

6、信息保存到pulPadType指向的地址中,返回的值为上一个函数设置的内容。 5:void GPIOPinTypeGPIOInput(unsigned long ulPort, unsigned char ucPins) 设置所选GPIO端口指定的管脚为高阻输入模式 如 GPIOPinTypeGPIOInput(GPIO_PORTA_BASE,GPIO_PIN_2);设置PA2脚为高阻输入模式 6:void GPIOPinTypeGPIOOutput(unsigned long ulPort, unsigned char ucPins) 设置所选GPIO端口指定的管脚为推挽输出

7、模式 如 GPIOPinTypeGPIOOutput(GPIO_PORTA_BASE,GPIO_PIN_2) 设置PA2脚为推挽输出模式 7:void GPIOPinTypeGPIOOutputOD(unsigned long ulPort, unsigned char ucPins) 设置所选GPIO端口指定的管脚为开漏输出模式 如 GPIOPinTypeGPIOOutputOD(GPIO_PORTA_BASE,GPIO_PIN_2) 设置PA2为开漏输出模式 但由于函数5,6,7函数名太长一般做如下简化: #define GPIOPinTypeIn GPIOPinTypeGP

8、IOInput #define GPIOPinTypeOut GPIOPinTypeGPIOOutput #define GPIOPinTypeOD GPIOPinTypeGPIOOutputOD 8: void GPIOPinTypeADC(unsigned long ulPort, unsigned char ucPins) 设置所选GPIO端口指定的管脚为ADC功能 这个函数只对有adc功能复用的管脚有用如LM3S811的1,2,3,4脚。。 9:void GPIOPinTypeCAN(unsigned long ulPort, unsigned char ucPin

9、s) 设置所选GPIO端口指定的管脚为CAN功能 10:void GPIOPinTypeComparator(unsigned long ulPort, unsigned char ucPins) 设置所选GPIO端口指定的管脚为CAN功能 11:void GPIOPinTypeComparator(unsigned long ulPort, unsigned char ucPins) 设置所选GPIO端口指定的管脚为模拟比较器功能 12:void GPIOPinTypeI2C(unsigned long ulPort, unsigned char ucPins) 设置

10、所选GPIO端口指定的管脚为I2C功能 13:void GPIOPinTypePWM(unsigned long ulPort, unsigned char ucPins) 设置所选GPIO端口指定的管脚为PWM 功能 14:void GPIOPinTypeQEI(unsigned long ulPort, unsigned char ucPins) 设置所选GPIO端口指定的管脚为QEI功能 15:void GPIOPinTypeSSI(unsigned long ulPort, unsigned char ucPins) 设置所选GPIO端口指定的管脚为SSI功能 1

11、6:void GPIOPinTypeTimer(unsigned long ulPort, unsigned char ucPins) 设置所选GPIO端口指定的管脚为Timer的CCP功能 本文 由西电F518学生实验室 小愫整理,转载请注明出处 17:void GPIOPinTypeUART(unsigned long ulPort, unsigned char ucPins) 设置所选GPIO端口指定的管脚为UART 功能 18: void GPIOPinTypeUSBDigital(unsigned long ulPort, unsigned char ucPins)

12、 设置所选GPIO端口指定的管脚为USB数字功能 对 GPIO管脚的读写操作是通过函数 GPIOPinWrite( )和 GPIOPinRead( )实现的,这是两个非常重要而且很常用的库函数。 19: void GPIOPinWrite(unsigned long ulPort, unsigned char ucPins, unsigned char ucVal); 向所选GPIO 端口的指定管脚写入一个值,以更新管脚状态, ucVal:写入指定管脚的值 注:ucPins 指定的管脚对应的 ucVal 当中的位如果是 1,则置位相应的管脚,如果是 0,则清零相应的管脚;uc

13、Pins未指定的管脚不受影响。 如 GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, 0x00); // 清除PA3 GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5, 0xFF); // 置位PB5 GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_2 | GPIO_PIN_6, 0xFF); //同时置位PD2、PD6 GPIOPinWrite(GPIO_PORTA_BASE, 0xFF, ucData); // 变量ucData 输出到PA0~PA7 20:long GPIOPi

14、nRead(unsigned long ulPort, unsigned char ucPins) 读取所选GPIO端口指定管脚的值,返回1个位组合的字节。该字节提供了由ucPins指定管脚的状态,对应的位值表示GPIO 管脚的高低状态。ucPins未指定的管脚位值是0。返回值已强制转换为long型,因此位31:8应该忽略。 这个函数应该在相应管脚已经设置为输出状态的情况下,由于GPIO得管脚结构我们知道在输出模式下,不管是开漏还是推挽用此函数读回来的值都是管脚的输出锁存值, 如 // 读取PA4,返回值保存在ucData里,可能的值是0x00或 0x10 ucData = GPIO

15、PinRead(GPIO_PORTA_BASE, GPIO_PIN_4); // 同时读取PB1、PB2和 PB6,返回PB1、PB2和 PB6的位组合保存在ucData里 ucData = GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_6); // 读取整个PF端口 ucData = GPIOPinRead(GPIO_PORTF_BASE, 0xFF); 在Stellaris 系列 ARM 里,每个 GPIO 管脚都可以作为外部中断输入。中断的触发类型分为边沿触发和电平触发两大类,共 5 种,

16、用起来非常灵活。配置 GPIO管脚的中断触发方式可以通过调用函数 GPIOIntTypeSet( )来实现,函数 GPIOIntTypeGet( )用来获取配置情况。函数 GPIOPinIntEnable( )和 GPIOPinIntDisable( )用来使能和禁止 GPIO管脚中断。函数 GPIOPinIntStatus( )用来获取 GPIO管脚的中断状态。在同一个 GPIO 端口上,8 个GPIO管脚的中断向量都是共用的。如果同时配置了同一端口上的多个管脚中断,则可以先利用函数 GPIOPinIntStatus( )读取中断状态, 再进一步确认具体是哪个管脚产生的中断请求。函数 GPI

17、OPinIntClear( )用来及时清除 GPIO管脚的中断状态。函GPIOPortIntRegister( )用来注册一个 GPIO端口中断服务函数,而注销的方法是调用函数GPIOPortIntUnregister( )。 2012CSDN网站六大类职位火热招聘中! 点击了解英特尔云计算 2012年1月当选微软MVP的CSDN会员名单揭晓! lm3s811 学习笔记(四)【gpio】 分类: cortex m32011-08-03 15:24295人阅读评论(0)收藏举报 今天主要是熟悉下gpio的一些应用。最简单的就是LED灯的控制。 下面的例子就拿L5来说明吧。 Sy

18、sCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);//enable gpio b GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_0);//set PB0 output 还有一种模式设置的方法GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_DIR_MODE_OUT) ;//这个方案可以设置多个引脚,参数2为位引脚的或 控制LED灯地亮灭,就是往引脚写入值 ledstatus = GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_0

19、); GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, GPIO_PIN_0&(~ledstatus)); 上面的程序是读取L5对应管脚的值,然后使灯地状态进行翻转。 这里说下GPIOPinWrite()该函数的用法。 GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1, GPIO_PIN_1); GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1, ~GPIO_PIN_1); 例程上常用上面的方法。主要也就是你要让哪个管脚置一,参数3的值中管脚对应的位必须置一。 如下各条指令都能点亮响

20、应端口(假设已经都定义成输出了)。 GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0,1); GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_1,2); GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_2,4); GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_3,8); GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_4,0x10); GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_5,0x20); GPIOP

21、inWrite(GPIO_PORTD_BASE,GPIO_PIN_6,0x40); GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_7,0x80); 下面我主要讲述下键控LED的流程,其实就是利用按键中断控制灯的亮灭。 首先是配置KEY。 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);//Enable GPIO C GPIOPinIntEnable(GPIO_PORTC_BASE, GPIO_PIN_4);//Enable GPIO C pin 4 GPIOPinTypeGPIOInput(GPIO_PORTC_

22、BASE, GPIO_PIN_4);//set the pin mode is input GPIOIntTypeSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_LOW_LEVEL);//set interrupt type is low Falling edge IntEnable(INT_GPIOC);//enable GPIO C interrupt 下面是按键中断的处理函数 void userkey_handler(void) { unsigned char ucVal; unsigned long ulStatus; ulStatus

23、 GPIOPinIntStatus(GPIO_PORTC_BASE, true);// get gpio c interrupt status GPIOPinIntClear(GPIO_PORTC_BASE, ulStatus); // clear interrupt status if (ulStatus & GPIO_PIN_4) // 如果KEY的中断状态有效 { ucVal = GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_0); // 翻转LED GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, ~ucV

24、al); SysCtlDelay(10 * (SysCtlClockGet() / 3000)); // 延时约10ms,消除按键抖动 while (GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_4) == 0x00); // 等待KEY抬起 SysCtlDelay(10 * (SysCtlClockGet() / 3000)); // 延时约10ms,消除松键抖动 } } 既然用到了SysCtlDelay()函数。在这里也顺道分析下。 #if defined(ewarm) || defined(DOXYGEN)//iar环境下 voi

25、d SysCtlDelay(unsigned long ulCount) { __asm(" subs r0, #1\n" " bne.n SysCtlDelay\n" " bx lr"); } #endif #if defined(codered) || defined(gcc) || defined(sourcerygxx)//codered、gcc、sourcerygcc环境下 void __attribute__((naked)) SysCtlDelay(unsigned long ulCount) { __asm(" subs r0, #1\n" " bne

26、 SysCtlDelay\n" " bx lr"); } #endif #if defined(rvmdk) || defined(__ARMCC_VERSION)//keil MDK环境下 __asm void SysCtlDelay(unsigned long ulCount) { subs r0, #1; bne SysCtlDelay; bx lr; } #endif #if defined(ccs)//ccs volatile unsigned long g_ulInlineCCSWorkaround; void SysCtlDelay(unsigne

27、d long ulCount) { __asm("delay?: subs r0, #1\n" " bne.n delay?\n" " bx lr\n"); // // This is needed to keep TI compiler from optimizing away this code. // g_ulInlineCCSWorkaround += ulCount; } #endif SysCtlDelay()执行了3个汇编语句,运行时间3个始终周期。函数说明上: The loop takes 3 cycles/loop. 1、在主晶振6MHZ的情况

28、下 SysCtlDelay(2); delaytime = 2 * 3 * (1/6000000) = 1us SysCtlDelay(10 * (TheSysClock / 3000)); delaytime = 10 * (6000000/3000)* 3 * (1/6000000) = 10ms 2、在主晶振8MHZ的情况下 SysCtlDelay(2); delaytime = 2 * 3 * (1/8000000) = 0.75us SysCtlDelay(10 * (TheSysClock / 3000)); delaytime = 10 * (8000000/3000)

29、 3 * (1/8000000) = 10ms 由此 可以看出无论是多大的晶振,都是除以3000。SysCtlDelay(10 * (TheSysClock / 3000));这种写法也方便移植 lm3s811点亮LED或流水灯程序 1急求!!!! 2010-8-6 17:41 提问者:luxiahua427511 | 悬赏分:5 | 浏览次数:525次 谢谢了啊 !刚开始学ARM又没有实际的程序!谢谢帮忙了 推荐答案 2010-8-15 12:34 #include "systemInit.h" // 定义LED #define LED

30、PERIPH SYSCTL_PERIPH_GPIOA #define LED_PORT GPIO_PORTA_BASE #define LED_PIN GPIO_PIN_2 // 主函数(程序入口) int main(void) { jtagWait(); // 防止JTAG失效,重要! clockInit();

31、 // 时钟初始化:晶振,6MHz SysCtlPeriEnable(LED_PERIPH); // 使能LED所在的GPIO端口 GPIOPinTypeOut(LED_PORT, LED_PIN); // 设置LED所在管脚为输出 for(;;) { GPIOPinWrite(LED_PORT, LED_PIN, 0x00); // 点亮LED //SysCtlDelay( 10000

32、00); // 延时 SysCtlDelay(1000 * (SysCtlClockGet( ) / 3 6000)); // 延时 1000 ms GPIOPinWrite(LED_PORT, LED_PIN, 0xFF); // 熄灭LED //SysCtlDelay(1000000); // 延时 SysCtlDelay(1000 * (SysCtlClockGet( ) / 3000)); // 延时 1000 ms } } 最基本的一个例程,已调试通过(systemInit

33、C的口该一下,811没G口的)。你可以去zlg网站上去找找资料,那里的例程很多,很适合新手。我也才刚刚开始学,一起努力了。 赞同 0 | 评论 回复:青风和大家一起学Stellaris系列ARM——九.ADC转换。 程序演示: 分别完成三种ADC变化:程序一:内部温度测试;程序二:单端采样;程序三:差分采样; 内部温度测试: 在Stellaris系列的ADC模块里,附带了一个内置的温度传感器,能够随时检测芯片的温度。该温度传感器可以有以下用途: 1 测试用:在单独测试ADC模块的功能时,而不必提供外部的模拟信号源 2 测量芯片自身温度,防止可能出现的过温(高

34、温应用场合必备) 3 估算环境温度:芯片温度总是比环境温度略高,如果通过实验找到这个差值,则可以进行软件修正 4 在随机算法里可以提供随机数种子 内部温度传感器提供了模拟温度读取操作和参考电压。输出终端SENSO的电压通过以下等式计算得到: SENSO = 2.7 -(T+55)/ 75 ADC温度传感器温度-电压关系 一个实用的ADC温度转换公式。假设温度电压SENSO对应的ADC采样值为N,2.7V对应N1,(T+55)/75对应N2。 已知: N1 ×(3/1024)= 2.7 N2 ×(3/1024)= (T+55)/ 75 由此得到: N = N1 - N2

35、 = 2.7 /(3/1024)-((T+55)/75)/(3/1024) 解得: T =(151040 - 225 × N)/ 1024 结论:ADC配置为温度传感器模式后,只要得到10位采样值N,就能推算出摄氏温度T。 程序标注: #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/adc.h" #include "driverlib/gpio.h" #include "driverlib/sysctl.h" #include "utils/uartstdio.h" vo

36、id InitConsole(void) { // // 初始化GPIO外设 // SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); // // 配置化串口外设 // GPIOPinConfigure(GPIO_PA0_U0RX); GPIOPinConfigure(GPIO_PA1_U0TX); // // 配置串口管脚 // GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); // // 初始化串口 // UARTStdioInit(0); }

37、 int main(void) { // // T设置数组读取 ADC FIFO // unsigned long ulADC0_Value[1]; // // 设置温度转换变量 // unsigned long ulTemp_ValueC; unsigned long ulTemp_ValueF; // // 设置PLL,ADC的时钟必须要16MHZ // SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); // // 初始化开发

38、板端口 // InitConsole(); // // 串口显示 // UARTprintf("ADC ->\n"); UARTprintf(" Type: Internal Temperature Sensor\n"); UARTprintf(" Samples: One\n"); UARTprintf(" Update Rate: 250ms\n"); UARTprintf(" Input Pin: Internal temperature sensor\n\n"); // // ADC0外设初始化 // SysCtlPeripheralEnable(SYSCT

39、L_PERIPH_ADC0); // // 配置ADC0,采样序列3,ADC处理器触发,优先级为0 // ADCSequenceConfigure(ADC0_BASE, 3, ADC_TRIGGER_PROCESSOR, 0); // // 温度传感,中断使能,对列结束选择,无ADC通道 // ADCSequenceStepConfigure(ADC0_BASE, 3, 0, ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END);// // //使能ADC采样 // ADCSequenceEnable(ADC0_BASE, 3); / //

40、 // //ADC中断清除 // ADCIntClear(ADC0_BASE, 3); // //设置温度显示 // while(1) { // //ADC处理器触发 // ADCProcessorTrigger(ADC0_BASE, 3); // //获取中断状态 // while(!ADCIntStatus(ADC0_BASE, 3, false)) { } // //获取ADC采样数据 // ADCSequenceDataGet(ADC0_BASE, 3, ulADC0_Value); // // 计算温度 C // ulTemp_Val

41、ueC = ((1475 * 1023) - (2250 * ulADC0_Value[0])) / 10230; // // 计算温度 F // ulTemp_ValueF = ((ulTemp_ValueC * 9) + 160) / 5; // // 串口显示 // UARTprintf("Temperature = %3d*C or %3d*F\r", ulTemp_ValueC, ulTemp_ValueF); // // 时钟延迟 // SysCtlDelay(SysCtlClockGet() / 12); } } 运行结果: LM3s81

42、1防止Jtag失效的源代码 (2011-05-21 14:20:16) 转载▼ 标签: lm3s811 杂谈 分类: LM3 void JtagWait(void) { unsigned long i; SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); // 使能KEY、LED所在的PC端口 GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_4); // 设置KEY所在管脚PC4为输入 GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_

43、5 ); // 设置LED所在管脚PC5为输出 if (GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_4) == 0x00) // 若复位或上电时按下KEY,则进入 { while(1) //死循环,以等待JTAG连接,LED闪烁 { for(i=0;i<200000;i++); GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5,GPIO_PIN_5); //点亮LED for(i=0;i<200000;i++); GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5,~GPIO_PIN

44、5); //熄灭LED } } SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOC); // 禁止KEY所在的GPIO端口 } 本代码来自eeword论坛的一位高手,我为了以后应用方便,故贴在此处。转载标明出处: 模数转换器 (ADC) 外设用于将连续的模拟电压转换成离散的数字量。 Stellaris系列ARM集成有一个分辨率为10位的ADC模块,支持4/16个输入通道,以及一个内部温度传感器。Lm3s811支持4个输入通道,lm3s9b96支持16个输入通道。每个ADC模块包含4个可编程的序列发生器。每个采样序列均对完全可配置的输入源、触发

45、事件、中断的产生和序列优先级提供灵活的编程。 Stellaris系列ARM的ADC通过使用一种基于序列(sequence-based)的可编程方法来收集采样数据,取代了传统ADC模块使用的单次采样或双采样的方法。每个采样序列均为一系列程序化的连续(back-to-back)采样,使得ADC可以从多个输入源中收集数据,而无需控制器对其进行重新配置或处理。 对本下811和9B96的结构图: 811ADC结构图 9B96 ADC结构图 对比2个系列的ADC结构图,大家可以发现:基本相差不大,触发条件完全相同:具有:比较器,定时器,GPIO,PWM的触发条件。 同时具有4个可编程序

46、列发生器,相对应的SS中断。不同的是9B96的ADC可以产生相应的PWM触发信号。811不支持外部参考电压,因此硬件方面: 811用于ADC方面的只有4个管脚了。分别代表4个输入通道。 您好!jtagwait是用于防止JTAG失效锁定,其作用主要是针对48脚和64脚的系列芯片,而现在的100脚的系列芯片已经支持JTAG解锁,所以可以不使用jtagwait来检测。 而jtagwait是防止用户对JTAG调试接口的相关引脚进行误操作,使软件不能利用JTAG调试功能,而微控制器在上电后,先执行jtagwait检测程序,来检测某引脚电平,并进入WHILE(1);循环,从而使得LM F

47、LASH PROGRAMMER软件可以通过JTAG连接上微控制器,进而将用户程序擦除,恢复其正常的JTAG调试功能。 LM3S系列JTAG口当IO用的解锁 LM3S系列ARM的JTAG口原本是跟IO口复用的,当GPIO用时跟一般GPIO没什么不同。一般只在GPIO口不够用或者做产品不希望用户随意更新固件时,会把JTAG口当GPIO口来用。如果将JTAG那5根线用作GPIO功能,芯片就会被锁住,不过要注意,锁住后JTAG就再也不起作用了。解决被锁的办法有两个: 一是下载程序时留有恢复措施,只需启用即可恢复。 如果没有加预防锁死的代码,就只能用Luminary的LM LINK来解锁

48、很遗憾的是Sandstorm系列(LM3Sxxx)只支持部分类型,解锁功能也不是很稳定,LM3Sxxxx才能很好解锁,不过可以试试看。如果有高人看得懂它的时序再写出上位机应该ULINK也解得了。实在打不开只能找流明诺瑞或更换芯片了。 下面是一段lordor兄使用LM3SXXX SmartBoard演示板恢复JTAG的演示代码: void Init_cpu(void) { //初始化系统时钟设置 SysCtlClockSet(SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ); /**********************

49、GPIOB 初始化 **********************************/ //使能GPIOB模块 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); //////////////////////////////////////////////////// ///////////锁定演示:如果设置为GPIO,则JTAG不起作用了 //按键检测 if(GPIOPinRead(KEYPORT, K1)) //如果为高电平 GPIODirModeSet(PH5_PORT, PH5, GPIO_DIR_MODE_IN); //JTAG if(GPIOPinRead(KEYPORT, K2)) //如果为高电平 { GPIODirModeSet(PH6_PORT, PH6, GPIO_DIR_MODE_IN); GPIODirModeSet(PH7_PORT, PH7, GPIO_DIR_MODE_IN); GPIODirModeSet(PH8_PORT, PH8, GPIO_DIR_MODE_IN); GPIODirModeSet(PH9_PORT, PH9, GP

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服