omapl138 ARM核 之CCS6下切换特权模式

 

1 .1 ARM的特权模式

         为什么同样的串口驱动在DSP上可以顺利应用,把它放在ARM上去应用却不行了呢?那么很有可能是你的ARM还处于用户模式,用户模式下的ARM有些寄存器是无权限访问的,比如系统配置寄存器,无法访问系统配置寄存器,那么就无法配置GPIO,所以串口的引脚初始化就做不了了,在这里先解释下ARM的运行模式:

         ARM一共有七种运行模式,除了用户模式外的六种模式都可以访问系统配置寄存器,只有用户模式无权限访问。当我们进入仿真后可以查看下CPSR寄存器的值,如下图所示

查询CPSR寄存器M值为10000对应的ARM模式为用户模式,所以我们需要想办法切换到特权模式。

         因为我们使用TI提供的CCS编译器,main函数之前的操作我们是没有看到的,ARM在进入main函数之前会有一大段汇编来初始化ARM的运行条件,比如设置栈,配置ARM工作模式的寄存器为CPSR寄存器,这段代码在编译器目录下的boot.asm文件         

首先将boot.asm拷贝到我们的工程目录中来,然后打开该文件去找到对cpsr寄存器操作的那一段代码,如下图所示,我们只需将0x10改为0x13即可。

然后我们将工程重新编译后下载,重新上电后再次进入仿真,CPSR寄存器M值变为10011,即已经进入特权模式,全速运行arm程序,你会很神奇的发现我们的本地串口已经可以正常应用啦!

1.2  使用AIS初始化GPIO

     如果你觉得上面的方法有些麻烦,亦可用AIS来实现UART串口GPIO的配置,因为我们的ARM程序相对简单,切换特权模式仅仅是为了初始化GPIO,费那么大劲只是为了初始化GPIO,浪费感情啊,那么可以使用TI为我们提供的AIS工具实现GPIO的初始化,这样我们就不用去管ARM处于什么模式啦!

    这里我用到的串口是OMAPL-138的本地串口0,查询数据手册后找到TX和RX对应的引脚

对应的PINMUX3寄存器

只需将PINMUX3寄存器16~23bit的值配置为0x22即可实现GPIO引脚复用为串口引脚,暂且将整个PINMUX3寄存器的值定位0x00220000。

    打开AIS工具,切到Pinmux页,如下图所示,配置PINMUX3值为0x00220000。

 

猜你喜欢

转载自blog.csdn.net/weixin_42314225/article/details/82555487