本帖最后由 le062 于 2014-9-17 23:57 编辑
在AM335X_StarterWare_02_00_01_01中就有一个操作LED的demo,不过它的工程是使用了预编译好的几个底层库,如下:
下面,将重建一个工程,把这几个库中源码导入,一起编译,实现一个流水灯。
建立新工程后,将上图中几个例程的源码导入,在main函数中简单调用gpio的操作函数,编译,发现drivers下几个c文件编译失败,可以将这几个文件注释掉(暂时用不到);还有在system下的汇编文件有几条关于NEON的指令报错,这儿需要将编译选项中的--neon勾选,重新编译通过。
在调试过程中遇到过几种问题: 1:调试器无法链接,这个问题一般通过调试器配置页面下的TEST CONNECTION进行连接测试 2:我们跑的程序默认需要加载到ddr中运行,所以需要通过一个脚本进行相关初始化。需要如下配置a8核,至于m3核,直接bypassed。
3:在脚本运行完成后报如下错误:
这个具体原因不清楚,解决方法是不要让bbb在上电时进入linux,比如在uboot中stop autoboot。
然后,基本上就可以跑起来了,当然整个过程相对于一般单片机繁琐了很多。
Main.c代码 和st的差不多吧。 #include "soc_AM335x.h"
#include "beaglebone.h"
#include "gpio_v2.h"
#define GPIO_INSTANCE_ADDRESS (SOC_GPIO_1_REGS)
#define GPIO_INSTANCE_PIN_NUMBER (23)
static void Delay(volatile unsigned int count)
{
while(count--);
}
int main()
{
GPIO1ModuleClkConfig();
GPIOModuleEnable(GPIO_INSTANCE_ADDRESS);
GPIOModuleReset(GPIO_INSTANCE_ADDRESS);
GPIODirModeSet(GPIO_INSTANCE_ADDRESS,
GPIO_INSTANCE_PIN_NUMBER,
GPIO_DIR_OUTPUT);
GPIODirModeSet(GPIO_INSTANCE_ADDRESS,
21,
GPIO_DIR_OUTPUT);
GPIODirModeSet(GPIO_INSTANCE_ADDRESS,
22,
GPIO_DIR_OUTPUT);
GPIODirModeSet(GPIO_INSTANCE_ADDRESS,
24,
GPIO_DIR_OUTPUT);
while(1)
{
GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
24,
GPIO_PIN_LOW);
GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
21,
GPIO_PIN_HIGH);
Delay(0x7FFFF);
GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
21,
GPIO_PIN_LOW);
GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
22,
GPIO_PIN_HIGH);
Delay(0x7FFFF);
GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
22,
GPIO_PIN_LOW);
GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
23,
GPIO_PIN_HIGH);
Delay(0x7FFFF);
GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
23,
GPIO_PIN_LOW);
GPIOPinWrite(GPIO_INSTANCE_ADDRESS,
24,
GPIO_PIN_HIGH);
Delay(0x7FFFF);
}
}
附件:工程包,a8初始化脚本(注意工程中位置),两份不错的参考资料
脚本.rar
(7.71 KB)
工程包.rar
(842.4 KB)
Jlink在starterware调试中的应用.pdf
(1.47 MB)
(分享)使用CCS5下载调试StarterWare例程代码的方法.pdf
(637.37 KB)
|