您的位置 首页 产品

S3C2440学习三(根底模块的运用1)

如果一个人学习一样东西或做一件事,达到忘我的境界,那么他将变得成功。①如何实现UART输出的?UART使用到的寄存器如下,(1)UART线性控制…

假如一个人学习相同东西或做一件事,到达忘我的境地,那么他将变得成功。

①怎么完结UART输出的?UART运用到的寄存器如下,(1)UART线性操控寄存器ULCONn,(2)UART操控寄存器UCONn,(3)UART FIFO操控寄存器UFCONn,(4)UART MODEM操控寄存器UMCONn,(5)UART 接纳发送状况寄存器UTRSTATn,(6)UART 过错状况寄存器UERSTATn,(7)UART FIFO状况寄存器UFSTATn,(8)UART MODEM状况寄存器UMSTATn,(9)UART发送缓存寄存器UTXHn,(10)UART接纳缓冲寄存器URXHn,(11)UART波特率除数寄存器UBRDIVn。

1. 先有必要装备好时钟频率,波特率不对就无法通讯。后边给一个时钟装备模板。首要UART通讯口有6根线,两根电源线,nCTS/nRTS/TXD/RXD这四根线对应PH0-PH3,先通过GPHCON它们设置成第二功用形式。用”mpll_val = (92<<12)|(1<<4)|(1);“通过对MPLLCON设置体系频率=400MHz,别的通过CLKDIVN时钟分频器操控寄存器,UCLK挑选寄存器=0表明UPLL时钟设为48MHz等于UCLK对USB供给的48MHz,HDIVN=10,一同CAMDIVN[9]=0,表明HCLK=FCL/4,PDIVN=1,表明PCLK=HCLK/2。好了现在的体系供给的频率:FCLK=400MHz,HCLK=100MHz,PCLK=50MHz,UCLK=48MHz。

其间CAMDIVN是摄像头时钟分频器寄存器,DIVN_UPLL[12]=0,这儿FCLK=MPLLclock,HDIVN=FCLK/4=100MHz。

2.接下来要初始化UART,设置UART FIFO操控寄存器,权限最低而且封闭FIFO,关掉UMCON形式0和形式1,通过设置ULCON线性操控寄存器,挑选每帧的数据位数为8位。通过UCON操控寄存器rUCON0 = 0x245; 挑选读写UART数据缓冲寄存器中止请求或查询形式,使能UART对反常发生中止。当非FIFO形式下发送缓存变空或在FIFO形式下发送缓存到达发送FIFO触发水平,则中止请求。

3.设置波特率,通过UBRDIV0/1/2来别离设置波特率。

4.挑选读取的串标语,实际上程序里是挑选读取的。

5.写数据选用WrUTXH0(\r); WrUTXH0(data);的调用方法进行些数据。

6.程序接纳,选用接中止符号等候接纳数据。UTRSTAT0/1/2,移位寄存器移空中止,再读取缓冲区的数据,通过获取的数据发送到超级终端,于是就能在终端上看到写上的数据了。

②怎么完结PWM调制输出?

蜂鸣器是由GPB0操控,改脚复用功用TOUT0即PWM输出。

1.同上装备好时钟分频,频率太快无法从蜂鸣器听到声响!

2.设置TOUT0输出,即GPBCON的GPB0为设置为10;然后用TCFG0/TCFG1/TCNTB0/TCMPB0装备PWM输出频率,

rTCFG0 &= ~0xff; //这两条句子设置设置定时器0、1的标定值,周期计数初值

rTCFG0 |= 15; //prescaler = 15+1

rTCFG1 &= ~0xf; //这个是挑选MUX输入到PWM定时器计数时8分频

rTCFG1 |= 2; //mux = 1/8

rTCNTB0 = (PCLK>>7)/freq;//定时器0计数缓存寄存器,用来装载到减计数的初值中,横竖定时器是减计数的

rTCMPB0 = rTCNTB0>>1; // 50%用来和计数器中的值做比较,也就用于脉宽调制

rTCON &= ~0x1f; //定时器操控寄存器,封闭死区,主动重装,关掉逆变器,更新TCNTB0/TCMPB0初值,敞开TIMER0

rTCON |= 0xb; //disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start timer 0

rTCON &= ~2; //clear manual update bit不再对TCNTB0/TCMPB0更新.

其实实际工作最勤快的TCNT0计数器,记载从PCLK的8分频脉冲,当TCNT0≤TCMPn时输出高电平,当TCNT0>TCMPn时输出低电平。

那么现在的周期究竟是多少呢?定时器输出时钟频率=PCLK/{prescaler value+1}/{divider value},PCLK=50MHz,那么divider value便是那个8分频,进过预分频器,prescaler=15,所以频率=50MHz/16/8=390.625KHz。还有那个计数值是多大,(PCLK>>7)/freq=390625/freq,这儿让freq=10,即T=(1/390625)*39062.5=0.1S,不知道为什么TCNTB这个值设置得到达必定程度就没有用了,这儿忘了这个寄存器16位有用65536,再大也没有用,改前面的定时器输出频率更有用。

③怎么完结AD采样?

先通过ADCCON寄存器来挑选AD通道,AD转化预分频器使能,写入AD转化预标定值(相当于这两项设定AD转化的频率),通过AN0-AN7/YM/YP/XM/XP,奇怪的AD转化,在AD转化开端后,AD开端位会由1->0,AD转化完毕后,AD完毕符号位由0->1,AD转化成果寄存在ADCDATA0寄存器中,S3C2440的AD是10的,可直接从ADCDAT0中取出,那么程序就触及ADCCON、ADCDATA0,这两个首要的寄存器,程序的话直接输入一个通道,回来一个AD值,别的便是AD的时钟,在装备体系时钟时挑选分配一个频率基准。IICCON是I2C总线操控寄存器。

④怎么完结IIC读写?

I2C无论是硬件仍是软件处理,都是构建一个I2C时序,满意硬件通讯,终究完结通讯。尽管简略仍是从寄存器和时序剖析一下,运用到了IICDS这个寄存器,它是寄存写或读取的IIC器材的首地址,可是有必要在敞开IIC传输前赋值;开端IIC通讯运用到了IICSTAT寄存器,再通过IICCON使能IIC操控总线,使能IIC总线的ACK功用、一同使能Tx/Rx中止、设置IICCLK频率,rIICCON = 0xaf;。现在这个程序是通过一个寄存器来符号状况,当读取或写入后,程序就会堕入while等候,那么只能通过中止,检查详细的状况,并对那个寄存器的值更新,使得程序跳出while。

⑤ADS怎么创立工程,怎么新建程序,怎么编译怎么仿真?

ADS其实是ARM公司推出的软件,ADS由命令行开发东西,ARM时实库,GUI开发环境(Code Warrior和AXD),实用程序取得支撑软件组成。命令行开发东西完结源代码编译,连接成可执行代码的功用。ARM运行时库首要是用来支撑被编译的C和C++代码。CodeWarrior for ARM是一套完好的集成开发东西,充分发挥了ARM RISC的优势,该东西专为根据ARM RISC的处理器而规划的。AXD是ARM扩展调试器。

⑥ “C言语”可变数目变元??

宏va_arg()、va_start()和va_end()一同运用,便能够完结向函数传入数目可变的变元操作。取可变数目变元的典型比如是函数printf()。类型va_list是在中界说的。创立一个能获取可变数目变元的函数的通用进程:在函数界说中,可变参数表之前有必要有一个或多个已知参数,其间最右者为last_parm。在调用va_start()时,last_parm名被用作第二个参数。任何可变长度的变元被拜访之前,有必要先用va_start()初始化变元指针argptr。初始化argptr后,通过对va_arg()的调用,以作为下一个参数类型的参数类型,回来参数。最终取完一切参数并从函数回来之前。有必要调用va_end()。由此保证仓库的正确康复。假如未正确运用va_end(),程序或许瘫痪。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/275107.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部