dcexpert 发表于 2019-10-5 14:48

【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>&nbsp;</p>

<p>运行MPLAB X&nbsp;IDE后(我安装的是目前最新版本 v5.25,不得不提一下这个版本速度有点慢,经常会有卡顿的情况出现),首先创建一个新的项目,在项目类型中选择 <strong>Standalone project</strong>。</p>

<p>&nbsp;</p>

<p></p>

<p>&nbsp;</p>

<p>然后是选择芯片型号,这里需要选择 ATmega4809。</p>

<p>&nbsp;</p>

<p></p>

<p>&nbsp;</p>

<p>在Tools中,选择ATmega4809 Curiosity Nano。注意需要先连接开发板,这样才能选择。</p>

<p>&nbsp;</p>

<p></p>

<p>&nbsp;</p>

<p>编译器选择 XC8。</p>

<p>&nbsp;</p>

<p></p>

<p>&nbsp;</p>

<p>最后输入项目名称和选择项目保存的位置。此外项目的字符集最好改为UTF-8,这样使用中文时才不会乱码。</p>

<p>&nbsp;</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>

dcexpert 发表于 2019-10-5 15:17

<p>新建的项目中没有包含任何源文件,需要先创建一个C文件。在项目的Source Files中,单击鼠标右键选择创建main.c。</p>

<p>&nbsp;</p>

<p></p>

<p></p>

<p>&nbsp;</p>

<p>在原理图上查到LED对应的引脚是PF5,于是按照以前的习惯顺手就写了 DDRF |= (1&lt;&lt;5); 没有想到编译就提示错误:</p>

<p>&nbsp;</p>

<pre>
<code>newmain.c: In function 'main':
newmain.c:13:5: error: 'DDRF' undeclared (first use in this function)
   DDRF |= (1&lt;&lt;5);</code></pre>

<p>&nbsp;</p>

<p>查看编程手册后,才发现ATmega4809虽然也是AVR系列,但它并不兼容早期的mega系列。它是新的megaAVR 0 系列,寄存器和xmega兼容。看到这里就想起来了ATMEL的AVR32和XMEGA这两个功能强大,但是又不太成功的系列。AVR32是针对32位ARM,XMEGA是MEGA的升级,虽然硬件功能在当时算不错,但是在软件方面资源较少,又不兼容以前的代码,再加上ARM COTEX-M的兴起,使得很多开发者选择了其它芯片。AVR的成功得益于开源,到现在arduino上使用最多的还是早期的ATmega328。</p>

<p>&nbsp;</p>

<p>在数据手册中,可以查到ATmega4809的方向寄存器是PORTx.DIR,输出寄存器有PORTx.OUT、PORTx.OUTSET、PORTx.OUTCLR、PORTx.OUTTGL等。其中PORTx.OUTTGL是输出翻转,写入1就可以使得对应的引脚翻转。在加上延时函数,一个简单的闪灯程序就完成了。</p>

<p>&nbsp;</p>

<pre>
<code class="language-cpp">#include &lt;xc.h&gt;
#include &lt;util/delay.h&gt;

int main(void) {

    PORTF.DIR |= (1&lt;&lt;5);
    while (1) {
      PORTF.OUTTGL |= (1&lt;&lt;5);
      _delay_ms(500);
    }
    return 0;
}</code></pre>

<p>&nbsp;</p>

<p>下载后发现闪灯的频率比预计的快了很多,检查发现是时钟频率不对。延时的时钟频率默认是1MHz,而ATmega4809默认的时钟频率是20MHz内部时钟进行6分频,修改时钟后延时时间就正常了。</p>

<p>&nbsp;</p>

<pre>
<code class="language-cpp">#define F_CPU20000000L/6

#include &lt;xc.h&gt;
#include &lt;util/delay.h&gt;

int main(void) {

    PORTF.DIR |= (1&lt;&lt;5);
    while (1) {
      PORTF.OUTTGL |= (1&lt;&lt;5);
      _delay_ms(500);
    }
    return 0;
}
</code></pre>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>
页: [1]
查看完整版本: 【ATmega4809 Curiosity Nano测评】闪灯