如何学习arduino的“硬件和软件接口”的知识?
最近在学习arduino 1.0的代码,关注了一下arduino reference里的几个function的实现。能看懂大概的意思,想继续深入研究,但是对arduino硬件和软件接口的知识不了解。
比如analogRead函数的实现,首先是给ADMUX赋值。对328p来说,ADMUX实际上就是0x7c。
为什么要给0x7c赋值呢,为什么要赋值为(1 << 6) | (pin & 0x07)呢?
这部分知识属于“硬件和软件接口”的知识,如果能知道这部分知识,不需要参考别人的代码,
完全可以自己写一个analogRead函数出来。
请问怎么样获取这些知识呢?
希望大侠们解惑,谢谢。
int analogRead(uint8_t pin)
{
uint8_t low, high;
// set the analog reference (high two bits of ADMUX) and select the
// channel (low 4 bits).this also sets ADLAR (left-adjust result)
// to 0 (the default).
// ADMUX = (analog_reference << 6) | (pin & 0x07);
ADMUX = (1 << 6) | (pin & 0x07);
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
// the MUX5 bit of ADCSRB selects whether we're reading from channels
// 0 to 7 (MUX5 low) or 8 to 15 (MUX5 high).
ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((pin >> 3) & 0x01) << MUX5);
#endif
// without a delay, we seem to read from the wrong channel
//delay(1);
// start the conversion
sbi(ADCSRA, ADSC);
// ADSC is cleared when the conversion finishes
while (bit_is_set(ADCSRA, ADSC));
// we have to read ADCL first; doing so locks both ADCL
// and ADCH until ADCH is read.reading ADCL second would
// cause the results of each conversion to be discarded,
// as ADCL and ADCH would be locked when it completed.
low = ADCL;
high = ADCH;
// combine the two bytes
return (high << 8) | low;
} 没有人指点一下迷津? 看看51的书吧,更接近底层一些 bzzdzc 发表于 2012-2-23 23:09 static/image/common/back.gif
看看51的书吧,更接近底层一些
谢谢。
现在我是想知道arduino的“接口”知识,从而更好的了解arduino。 你要是有单片机基础,那就直接上AVR C,找本书看看AVR单片机寄存器 中断啥的,arduino就是一个AVR单片机的开发板。
如果没有,那还是先熟悉arduino的功能,熟悉之后再深究 同意楼上的建议 ,先了解arduino它的功能作用,才能更好的帮组了解更深层的东西。先打好基础吧!
www.arduino.cc/en/上面都有介绍,可以慢慢看 我觉得要一般了解arduino的功能作用,一个blink实验差不多就能知道是怎么回事了。
但是要深入理解arduino的话,得分析它的提供的编程接口,学习arduino reference里functions的实现。
更深一步,就是前面几位提到的avr c, avr单片机的体系结构了。 arduino是封装了AVR的功能,ATMETA的芯片太多,所以想通用的话最好去研究AVR,这样通过芯片的白皮书你可以知道IO口的作用。而arduino对其所支持的几个芯片做了封装了,所以当你使用Pin1,Pin2时,它已经帮你定义好了芯片的物理接口,而arduino又提供了好多接口和类,你直接调用就行了,而不用管底层的东西。好久没碰arduino了,我的理解是这样 你可以看atmega芯片的datasheet,从官网可以下到,上面有各个接口的含义,如果想深入系统学习单片机,建议从51开始,arduino只适合快速搭建平台,不能让你接触过多底层 ADMUX其实是芯片的ADC寄存器
想要更深入的了解arduino,那就学avr吧
学单片机不一定要从51开始,avr其实是个不错的选择
等你把avr的各种常用寄存器,中断,定时器什么的搞懂你对arduino就会有更深的理解了 从基础做起那是必须的,我也是从51过来的。学东西不能太急!
页:
[1]