Category Archives: ARM

7x256的IO口模块

7X256有二个并行的输入输出端口,即端口A和端口B,每个端口有31个端口线。 对应的有二个端口控制模块,每个端口控制模块控制着31个端口线,在7X256复位之后,所有的端口被配置成输入,并且内部上拉使能 每个端口可以被定义成普通的输入输出口或者被定义成内部外围模块功能。每一个IO口线对应着32位寄存器中的一位,即可位寻址。 这些端口具有以下特点: 1。每一个端口都有输入变化中断功能 2。。。。 3。开漏输出 4。上拉控制 5。输入和输出控制 PMC控制着端口时钟,在配置端口寄存器的时候不要求端口使钟使能,但在使用输入改变中断和读引脚电平的时候需要端口时钟是使能的。在7X256复位之后,端口时钟是被禁止的。

Posted in ARM | Leave a comment

7X256电源以及时钟模块

7X256的时钟源主要三部分:主时钟振荡(main clock) PLL倍频,内部RC振荡 主时钟频率在3M-20M之间,在ARM复位之后,主时钟是被禁止的,RC时钟被选中,有利于降低功耗 主时钟的使能位在CKGR_MOR的MOSCEN位,置1使能,清0禁止,禁止时PMC_SR的MOSCS自动清零 在使能主时钟时,必须先初始化主时钟启动定时器0SCOUNT(8位,位于CKGR_MOR中),在使能之后,MOSCS位清零,计数器以RC的8分频倒计时,当时间到之后,MOSCS位被置1,完成主时钟启动。(设置好PMC_IMR中的位,可产生中断) 在7X256内部,有个主时钟计数器,这个主时钟计数器在主时钟稳定(MOSCS置1)后,在slow clock的第一个上升沿后以主时钟的速度计数,接着在slow clock的第十六个下降沿停止计数,这个值可以通过读MAINF(位于CKGR_MCFR中)读出,这个值是slow clock16个周期内主时钟计数的值,通过这个值可以检查主时钟的频率 7X256也可使用外部时钟,需要设置某些位,具体看文档 PLL倍频时钟: PLL模块输入由主时钟提供,内含一个除法器和乘法器。 除法器可设置值为1-255之间,当设置为0的时候,PLL模块将输出0,在7X256复位后,除法器值为0 乘法器为0时,PLL禁止,节省能源,写入大于0的值时启动倍频 PLL输出时钟频率=main clock*(MUL+1)/DIV 当PLL使能或者它的某个参数改变时,LOCK位(位于PMC_SR中)自动被清零,写入PLLCOUNT(位于CKGR_PLLR中)自动被载入PLL计数器,PLL计数器以slow clock的速度自减,当减到零的时候,LOCK位被置1并且会触发一个中断,在使能PLL之前,必须装载值进入PLLCOUNT中。 电源控制模块(PMC)通过控制外围时钟来使电源最优化,电源控制模块提供以下时钟: 1,MCK(master clock),可编程从几百HZ到设备可使用的最大时钟频率 2,PCK(processor clock),处理器待机模式时关闭 3,外围时钟,典型的MCK,内含的外围模块,如:USART,SSC,SPI,TWI,TC,MCI等等。这些外围时钟都能独立的控制,MCK是为了减少这些外围时钟的名字而命名的 4,UDP CLOCK,提供给USB设备的时钟 5,可编程的时钟输出能从PCKX引脚输出从时钟产生器中选择 MCK控制模块能对MCK进行选择和分频,它提供所有外围的时钟以及存储的时钟,它从SLOW CLOCK,MAIN CLOCK,PLL中选择一个作为时钟源,MCK控制模块由时钟选择和分频组成。 时钟选择是通过写CSS(位于PMC_MCKR中)来控制的,预分频器支持从1-64分频,是通过写PRES(位于PMC_MCKR中)来控制的。 每次MCK选择新的时钟时,MCKRDY位被清零,直到MCK确立后才被置1。 处理器时钟控制模块 处理器时钟使能和禁止是通过写PMC_SCER和PMC_SCDR来控制的,在PMC_SCSR寄存器的时钟状态位可读 在7X256复位后PCK默认使能,它也能被一些使能的中断重新使能。禁止PCK将使7X256进入待机状态,在待机状态时它会被一些快速或正常的中断或复位使能。 USB时钟控制模块 USB的时钟源是PLL模块的输出时钟,用户如果要使用USB,必须编程PLL到48M或者96M或者192M+-0.25%,这个是通过编程USBDIV位(在CKGR_PLLR中)USB时钟通过置UDP位(在PMC_SCER中)使能,为了节省电源,在不用USB的时候把USB时钟关掉。USB设备要求48MHZ时钟以及MCK 外围时钟控制模块 外围时钟在7X256复位之后默认关闭状态。 … Continue reading

Posted in ARM | Leave a comment

7X256的DEBUG单元

前面因为出差停了五六天的学习,现在开始继续研究7X256这块板子 今天试着弄了下DEBUG单元,目前只弄了发送,DEBUG单元是二线异步串口 一般的程序都把这个初始化成波特率115200,无校验,1位停止位,初始化DEBUG单元程序如下: (PLL至96MHz (96,109MHz),MCK为二分频,即约48MHZ) void InitDebug(void) {     AT91F_DBGU_CfgPMC();        //使能DEBUG外围时钟     AT91F_DBGU_CfgPIO();        //使能DEBUG端口     AT91C_BASE_DBGU->DBGU_BRGR = 26;   //CD = (73*18.43M/14/2)/16/115200 /*                                                  MCK 波特率计算公式BAUD=MCK/(16*CD)=115200   CD=26 */     AT91C_BASE_DBGU->DBGU_MR = AT91C_US_PAR_NONE | AT91C_US_CHMODE_NORMAL;    //元校验位,正常模式     AT91C_BASE_DBGU->DBGU_CR = AT91C_US_RXEN | AT91C_US_TXEN;                 //使能接收和发送 … Continue reading

Posted in ARM | Leave a comment

AT91SAM7X-ek第一个工程

周末拿到这块板子,一直只是在上面跑了下二个例程,没有仔细研究。用的是IAR EWARM 昨天试着自己新建一个工程,然后把例程的文件移值过来,可是没那么简单,跑不起来,原来用IAR FOR MSP430的时候可是比较简单的事情,这里最重要的是PROJECT-》OPTIONS的设置,到今天终于能跑起来了,不过里面的地址映象文件(MAC,XCL文件)用的是例程里的,这个还没去研究,而且也没有弄出RAM-DEBUG和FLASH-DEBUG可选的来,但至少能跑起来了,也能下载到FLASH里面去,下面讲下OPTION的设置。主要是下面几个选项: 1 general options:(截图太麻烦,就用文字说明)注:IAR EWARM 4.42A版本 第一个是Target,即目标设置,选择对应的CORE和DEVICE,即ARM7TDMI和AT91SAM7X256,FPU是不可选的,下面的generate interwork code必须选上,是混合ARM和THUBM代码的,下面三个选项选择默认就行,即:THUMB,LITTLE,4 BYTE; 第二个是Output选择executable,下面的用默认 第三个是Library configuration 选择Normal 第四个是Library Options 在printf formatter选择Tiny,Scanf formatter选择small 第五个不动 2 C/C++ Complier 第一个是language,按照默认的即可 第二个是Optimizations,选择size-》None 第三个是Output,选中generate debug information 第四个是list,选中Output list file->Assembler mnemonics 第五个是Preprocessor,在Additional include directories中输入$PROJ_DIR$ 表示工程本目录 … Continue reading

Posted in ARM | Leave a comment

at91sam7x-ek板的第一个例程,点亮POWERLED

启动文件,内存映射文件用的都是例程上的,先不去深究,主要是能让程序跑起来,下面是main函数 以下是程序中涉及到的宏定义内容 #define AT91D_BASE_PIO_LED    (AT91C_BASE_PIOB) #define AT91B_POWERLED        (1<<25)       // PB25 int main() {     // 使能IO时钟        AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;     //使能POWERLED IO口输出功能        AT91F_PIO_CfgOutput(AT91D_BASE_PIO_LED,AT91B_POWERLED);     //输出高电平点亮         AT91F_PIO_SetOutput( AT91D_BASE_PIO_LED, AT91B_POWERLED) ;     //输出低电平灭         … Continue reading

Posted in ARM | 1 Comment

at91sam7x-ek

从于源那里把这块ATMEL的DEMO板借出来学习,现在学二步走,一边VC++,一边ARM,这个是ARM7,先从这个学起吧 虽然光盘里的资料都是英文的,但硬着头皮看吧,而且这个好象网上资料不是很多,阿莫那边的是7S64,不知道和这个区别有多大,还有待确定,现在先把256的文档大概看一遍,在下载IAR FOR ARM4.42。 C++那边要学习的东西很多,主要是类了,现在在看第三课了,不过这个星期一直觉得好困,得早点睡觉。 深圳今天风大,电视上看到台风“烷熊”要来了,那最近可能都要下雨了。 今天托小朱帮我去人才市场拿接受函,要把档案的事情尽快搞定。 还剩三张电影票,明天不下大雨的话和赖长还有小龙去看,呵,三个大男人。 明天北京小伊那边板子不知道能不能到,到了还要尽快弄出来,答应半个月时间的,不过做板差不多就花了一个星期 只有到手后尽量快点弄好寄过去,用了那样的隔离措施应该不会有太大的问题,这次只收了他1000块钱,应该是比较少的。

Posted in ARM | 1 Comment

ARM的开发步骤

ARM的开发步骤 ARM的开发步骤 1. 做个最小系统板:如果你从没有做过ARM的开发,建议你一开始不要贪大求全, 把所有的应用都做好,因为ARM的启动方式和dsp或单片机有所不同,往往会遇到各种问题, 所以建议先布一个仅有Flash,SRAM或SDRAM、CPU、JTAG、和复位信号的小系统板,留出扩展接口。 使最小系统能够正常运行,你的任务就完成了一半,好在ARM的外围接口基本都是标准接口, 如果你已有这些硬件的布线经验,这对你来讲是一件很容易的事情。 2. 写启动代码,根据硬件地址先写一个能够启动的小代码,包括以下部分: 初始化端口,屏蔽中断,把程序拷贝到SRAM中;完成代码的重映射;配置中断句柄, 连接到C语言入口。也许你看到给你的一些示例程序当中,bootloader会有很多东西, 但是不要被这些复杂的程序所困扰,因为你不是做开发板的,你的任务就是做段小程序, 让你的应用程序能够运行下去 3. 仔细研究你所用的芯片的资料,尽管ARM在内核上兼容,但每家芯片都有自己的特色, 编写程序时必须考虑这些问题。尤其是女孩子,在这儿千万别有依赖心理, 总想拿别人的示例程序修改,却越改越乱。 4. 多看一些操作系统程序,在ARM的应用开放源代码的程序很多,要想提高自己, 就要多看别人的程序,linux,uc/os-II等等这些都是很好的原码。 6.如果你是作硬件,每个厂家基本上都有针对该芯片的DEMO板原理图。先将原理图消化。 这样你以后做设计时,对资源的分配心中有数。器件的DATSHEET一定要好好消化。 7.如果做软件最好对操作系统的机理要有所了解。当然这对软件工程师来说是小菜一碟。 但如果是硬件出身的就有点费劲。 问:做最小系统板是2层还是4层好? 答:只有AT91可以用两层板,其他的最少4层;44b0的地和电源处理好也可用两层板; 谈四层板和33欧电阻: 选用四层板不仅是电源和地的问题,高速数字电路对走线的阻抗有要求,二层板不好控制阻抗。 33欧电阻一般加在驱动器端,也是起阻抗匹配作用的;布线时要先布数据地址线,和需要保证的高速线; 在高频的时候,PCB板上的走线都要看成传输线。传输线有其特征阻抗,学过传输线理论的都知道, 当传输线上某处出现阻抗突变(不匹配)时,信号通过就会发生反射,反射对原信号造成干扰, 严重时就会影响电路的正常工作。采用四层板时,通常外层走信号线,中间两层分别为电源和地平面, 这样一方面隔离了两个信号层,更重要的是外层的走线与它们所*近的平面形成称为“微带”(microstrip) 的传输线,它的阻抗比较固定,而且可以计算。对于两层板就比较难以做到这样。 这种传输线阻抗主要于走线的宽度、到参考平面的距离、敷铜的厚度以及介电材料的特性有关, 有许多现成的公式和程序可供计算。 33欧电阻通常串连放在驱动的一端(其实不一定33欧,从几欧到五、六十欧都有,视电路具体情况) , 其作用是与发送器的输出阻抗串连后与走线的阻抗匹配,使反射回来(假设解收端阻抗没有匹配) … Continue reading

Posted in ARM | Leave a comment