【ATmega4809 Curiosity Nano测评】闪灯
<div class='showpostmsg'><p>第一个程序从闪灯开始,在编程前,需要先安装好开发软件,包括IDE和编译器(可以参考这个帖子:<a href="https://bbs.eeworld.com.cn/thread-1092291-1-1.html" target="_blank">https://bbs.eeworld.com.cn/thread-1092291-1-1.html</a>)。</p><p> </p>
<p>运行MPLAB X IDE后(我安装的是目前最新版本 v5.25,不得不提一下这个版本速度有点慢,经常会有卡顿的情况出现),首先创建一个新的项目,在项目类型中选择 <strong>Standalone project</strong>。</p>
<p> </p>
<p></p>
<p> </p>
<p>然后是选择芯片型号,这里需要选择 ATmega4809。</p>
<p> </p>
<p></p>
<p> </p>
<p>在Tools中,选择ATmega4809 Curiosity Nano。注意需要先连接开发板,这样才能选择。</p>
<p> </p>
<p></p>
<p> </p>
<p>编译器选择 XC8。</p>
<p> </p>
<p></p>
<p> </p>
<p>最后输入项目名称和选择项目保存的位置。此外项目的字符集最好改为UTF-8,这样使用中文时才不会乱码。</p>
<p> </p>
<p></p>
<p><br />
<b><font color="#5E7384">此内容由EEWORLD论坛网友<font size="3">dcexpert</font>原创,如需转载或用于商业用途需征得作者同意并注明出处</font></b></p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>新建的项目中没有包含任何源文件,需要先创建一个C文件。在项目的Source Files中,单击鼠标右键选择创建main.c。</p>
<p> </p>
<p></p>
<p></p>
<p> </p>
<p>在原理图上查到LED对应的引脚是PF5,于是按照以前的习惯顺手就写了 DDRF |= (1<<5); 没有想到编译就提示错误:</p>
<p> </p>
<pre>
<code>newmain.c: In function 'main':
newmain.c:13:5: error: 'DDRF' undeclared (first use in this function)
DDRF |= (1<<5);</code></pre>
<p> </p>
<p>查看编程手册后,才发现ATmega4809虽然也是AVR系列,但它并不兼容早期的mega系列。它是新的megaAVR 0 系列,寄存器和xmega兼容。看到这里就想起来了ATMEL的AVR32和XMEGA这两个功能强大,但是又不太成功的系列。AVR32是针对32位ARM,XMEGA是MEGA的升级,虽然硬件功能在当时算不错,但是在软件方面资源较少,又不兼容以前的代码,再加上ARM COTEX-M的兴起,使得很多开发者选择了其它芯片。AVR的成功得益于开源,到现在arduino上使用最多的还是早期的ATmega328。</p>
<p> </p>
<p>在数据手册中,可以查到ATmega4809的方向寄存器是PORTx.DIR,输出寄存器有PORTx.OUT、PORTx.OUTSET、PORTx.OUTCLR、PORTx.OUTTGL等。其中PORTx.OUTTGL是输出翻转,写入1就可以使得对应的引脚翻转。在加上延时函数,一个简单的闪灯程序就完成了。</p>
<p> </p>
<pre>
<code class="language-cpp">#include <xc.h>
#include <util/delay.h>
int main(void) {
PORTF.DIR |= (1<<5);
while (1) {
PORTF.OUTTGL |= (1<<5);
_delay_ms(500);
}
return 0;
}</code></pre>
<p> </p>
<p>下载后发现闪灯的频率比预计的快了很多,检查发现是时钟频率不对。延时的时钟频率默认是1MHz,而ATmega4809默认的时钟频率是20MHz内部时钟进行6分频,修改时钟后延时时间就正常了。</p>
<p> </p>
<pre>
<code class="language-cpp">#define F_CPU20000000L/6
#include <xc.h>
#include <util/delay.h>
int main(void) {
PORTF.DIR |= (1<<5);
while (1) {
PORTF.OUTTGL |= (1<<5);
_delay_ms(500);
}
return 0;
}
</code></pre>
<p> </p>
<p> </p>
<p> </p>
页:
[1]