裸机开发学习心得有什么问题欢迎一起交流。以下是部分心得。ledgpxcon中每两位控制一个引脚:00输入,01输出,10特殊功能初始化rgpbcon,rgpbup,rgpbdat三个寄存器关于ads配置的解释:在targetsettings中的post-linker中选择armfromelf,因为我们需要把elf文件格式转化为下载到flash中所必须的二进制文件。在languagesettings中的所有语言的target下的architectureorprocessor,选择arm920t,因为s3c2440是arm920t内核。在armlinker中的output中的robase填写0x30000000,因为在开发板上sdram是从0x30000000地址开始。在layout中的object/symbol中填写2440init.o,它是启动文件的目标文件,在section中填写init,它是在启动文件中我们所定义的入口代码段的名称。外部中断我们要打开某一中断的屏蔽,这样才能响应该中断,相对应的寄存器为intmsk;还要设置外部中断的触发方式,如低电平、高电平、上升沿、下降沿等,相对应的寄存器为extintn。另外由于eint4到eint7共用一个中断向量,eint8到eint23也共用一个中断向量,而intmsk只负责总的中断向量的屏蔽,要具体打开某一具体的中断屏蔽,还需要设置eintmask。有一些中断是共用一个中断向量的,而一个中断向量只能有一个中断执行函数,因此具体是哪个外部中断,还需要eintpend或rintoffset来判断使用__irq这个关键词来定义中断处理函数,这样系统会为我们自动保存一些必要的变量,并能够在中断处理函数执行第1页共5页完后正确地返回这种形式:void__irqkey;pisr_eint0=(int)key;定时器使用主要配置:外部时钟源→通过寄存器mpllcon得到fclk→再通过寄存器clkdivn得到hclk和pclk->再得到定时器的工作频率pwm定时器使用:蜂鸣器=gpb0=tout0=定时器0蜂鸣器高电平响,低电平不响关键是设置寄存器tcntbn和tcmpbn,前者可以确定一个计数周期的时间长度,而后者可以确定方波的占空比定时器中断使用:不需要配置tcmpbn,只需tcntbn,tcntbn*1/定时器的工作频率=定时的时间但要记住中断要:void__irqtimer0_sever;pisr_timer0=(int)timer0_sever;rintmsk=~bit_timer0;uart主要配置以下寄存器:ubrdivn,uconn,utrstatn收发寄存器:utxhn,urxhn注意几点:1.对于s3c2440来说,接收数据是被动的,发送数据是主动的,因此一般来说,接收数据用中断方式,发送数据用查询方式较好;2.在中断方式下,当接收到数据时,尽管可能该数据无用,但也一定要读取它,否则下次再接收数据时,不会再引起中断,因为接收数据缓存器被上次接收到的数据所霸占,只要没有读取它,它就永远在那里;3.由于uart中断涉及到subsrcpnd寄存器,因此在中断处理程序中不仅要清srcpnd寄存器,还要清subsrcpnd寄存器,它们的顺序一定是先清subsrcpnd寄存器,再清srcpnd寄存器,否则就会引起一个中断两次响应的问题。因为是否中断由srcpnd寄存器决定,而srcpnd寄存器的相关状态位由subsrcpnd寄存器决定第2页共5页简单的串口控制台:1.键盘输入数据后在控制台上进行回显recv_data=uart_getc;returnrecv_data;2.让接收的字符组成命令data_buf[i]=uart0_scanf;if(data_buf[i]=='\0')3回车——命令判断、退格——删除字符、判断命令后进入相应分支进行处理elseif(data_buf[i]=='\b')if(。(no_system_strcmp("readiic",cmd_buf)))lcd(4.3寸,480*272)在2440中时钟设置是fclk:hclk:pclk=400:100:50注意两点:1时序,参数的设置vclk是像素时钟信号。vclk=hclk÷[(clkval+1)×2]例如,hclk的频率为100mhz,要想驱动像素时钟信号为6.4mhz的lcd屏,则通过上式计算clkval值在s3c2440中,所有的这些信号(vspw、vfpd、vbpd、lineval、hbpd、hfpd、hspw和hozval)都是实际值减1的结果。这些值是通过寄存器lcdcon2、lcdcon3和lcdcon4来配置行频(hsf)和场频(vsf):hsf=vclk÷[(hspw+1)+(hspd+1)+(hfpd+1)+(hozval+1)]=7.1÷408=17.5khzvsf=hsf÷[(vspw+1)+(vbpd+1)+(vfpd+1)+(lineval+1)]=17.5÷270=64.8hz2、显示缓存区一般我们是通过定义一个与屏幕尺寸大小相同的二维数组来开辟该空间的,这样控制屏幕内容会方便一些,如...