准备
安装MDK这里就不再赘述了。
安装芯片支持包
安装ATSAME54开发板支持包,本开发板基于ATSAME54 XPlained PRO开发板的基础上开发,两个 MCU 在引脚数和外设方面完全相同,只是 ATSAMD51P20A 没有以太网和 CAN FD。
ATSAMD5x/E5x是同一个系列,用ATSAME54 XPlained PRO评估板的例程,只要不包含以太网和CAN功能的,均可以直接在ATSAMD51 EVK评估板上运行。
创建工程
菜单栏
Project->New uVison Project...
配置工程
添加源码main.c
添加到工程,编译,有告警先不管
邮件点击”Target 1”->Options for Target ‘Target 1’
按如下设置,点击Settings
选择仿真器
确认FLASH烧录算法
勾选如下设置Use Micro LIB
下载程序仿真
点击仿真,自动进入main函数处
以上基本的开发环境就搭建好了,可以仿真了。
LED操作
之前已将安装了芯片的支持包
头文件位于
Mdk的安装路径
Keil_v5\ARM\PACK\Microchip\SAMD51_DFP\3.6.120\samd51a\include
包含总的头文件#include "sam.h"即可
该头文件根据宏__SAMD51P20A__或者__ATSAMD51P20A__会包含
#include "samd51p20a.h"
再包含\ARM\PACK\Microchip\SAMD51_DFP\3.6.120\samd51a\include下的其他头文件。
原理图可以看到PC18控制用户LED0
参考用户手册《SAM-D5x-E5x-Family-Data-Sheet-DS60001507.pdf》的第《32. PORT - I/O Pin Controller》 进行IO的控制。
IO操作寄存器位于component/port.h
通过#define PORT_REGS ((port_registers_t*)0x41008000) /* PORT Registers Address */
PORT_REGS.GROUP[x]访问不同组IO。索引0~3分别对应PA~PD
寄存器保护
有些寄存器有保护,需要先解除保护
PORT相关的默认是没有保护,所以不需要操作,不过也可以了解下
通过WRCTRL 寄存器进行写保护解除
#define PAC_REGS ((pac_registers_t*)0x40000000) /* PAC Registers Address */
PAC_REGS->PAC_WRCTRL访问
PORT属于APBB桥
所以BridgeNumber=1
PERID=4
PAC_REGS->PAC_WRCTRL = (1<<16) | (32*1+4); 接触PORT写保护
PORT操作
PORT输出只需要配置最少两个寄存器即可
设置输出
PORT_REGS->GROUP[2].PORT_DIRSET = 1<<18; //PC18 OUTPUT
输出0或者1
PORT_REGS->GROUP[2].PORT_OUT |= 1<<18; //PC18 SET
PORT_REGS->GROUP[2].PORT_OUT &= ~(1<<18); //PC18 SET
所以完整的测试代码如下
#include "sam.h"
void io_delay(void)
{
volatile int tout=1000000;
while(tout--);
}
int main(void)
{
///PAC_REGS->PAC_WRCTRL = (1<<16) | (32*1+4);
PORT_REGS->GROUP[2].PORT_DIRSET = 1<<18; //PC18 OUTPUT
while(1)
{
PORT_REGS->GROUP[2].PORT_OUT |= 1<<18; //PC18 SET
io_delay();
PORT_REGS->GROUP[2].PORT_OUT &= ~(1<<18); //PC18 SET
io_delay();
}
return 0;
}
下载运行可以看到黄色的LED0闪烁。
参考
https://bbs.eeworld.com.cn/elecplay/content/7ca9facb#F4