假如一个人学习相同东西或做一件事,到达忘我的境地,那么他将变得成功。
①怎么完结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是在