TI中文支持网
TI专业的中文技术问题搜集分享网站

RTOS|AM437x PRU如何直接访问GPO

我准备用PRU直接访问gpo[10],对应GPIO4_16(AD21),该管脚连接了LED。

PRU程序如下:

#include <stdint.h>
#include <pru_cfg.h>
#include "resource_table_empty.h"

volatile register uint32_t __R30;
volatile register uint32_t __R31;

void main(){
	volatile uint32_t gpio;

	/* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */
	CT_CFG.SYSCFG_bit.STANDBY_INIT = 0;

	/* Toggle GPO pins TODO: Figure out which to use */
	gpio = 0x0400;

	/* TODO: Create stop condition, else it will toggle indefinitely */
	while(1){
		__R30 ^= gpio;
		__delay_cycles(100000000);
	}

	/* Halt the PRU core */
	__halt();
}

编译后得到PRO_XX.hex的array数组,将其拷贝A9程序中生成PRU_LED_Bin.h,在A9中使用如下代码装载:

PRUICSS_Config  *pruIcssCfg;
		int32_t ret  = PRUICSS_socGetInitCfg(&pruIcssCfg);
		if (ret  == PRUICSS_RETURN_SUCCESS)
		{
			pruIcss0Handle = PRUICSS_create((PRUICSS_Config*)pruIcssCfg,1);
			PRUICSS_pruDisable(pruIcss0Handle,0);
			PRUICSS_pruDisable(pruIcss0Handle,1);
			ret = PRUICSS_setPRUBuffer(pruIcss0Handle, 0, (Uint32*)PRU_LED_Firmware, sizeof(PRU_LED_Firmware));
			ret = PRUICSS_setPRUBuffer(pruIcss0Handle, 1, (Uint32*)PRU_LED_Firmware, sizeof(PRU_LED_Firmware));
			if (ret==0)
			{
				ret = PRUICSS_pruExecProgram(pruIcss0Handle, 0);
				ret = PRUICSS_pruExecProgram(pruIcss0Handle, 1);
			}
			PRUICSS_pruEnable(pruIcss0Handle,0);
			PRUICSS_pruEnable(pruIcss0Handle,1);
		}

执行后,对应的LED没有反应,如果直接在A9程序中对GPIO操作则LED正常闪烁。请问有可能是哪个环节的问题?如何进行调试?

user5885945:

看到另外一个帖子里面说需要将GPIO对应的pinmux配置成PRUSS gpo模式,是否修改文件夹C:\ti\pdk_am437x_1_0_4\packages\ti\starterware\board\am43xx里面的pinmux_data.c文件,然后重新编译starterware就可以了?
我试了,还是没有效果。

user5885945:

回复 Nancy Wang:

请问上述步骤(PRU编程、array十六进制数组生成以及在ARM中的代码操作)有问题吗?还是说仅仅是gpo模式没有设置对呢?
如果是,除了通过修改pinmux_data.c设置PinMux,有没有在线通过代码修改PinMux的方法呢?

user5885945:

回复 Nancy Wang:

问题已解决,的确是GPO模式设置的问题。
我先通过Board_Init使能BOARD_INIT_ICSS_PINMUX进行初始化,不过并没有效果。
最后我通过直接对寄存器赋值搞定了。*((unsigned int*) 0x44E109F0) = 4; //PIN_CAM1_DATA2–>Mode 4*((unsigned int*) 0x44E109F4) = 4; //PIN_CAM1_DATA2–>Mode 4*((unsigned int*) 0x44E109F8) = 4; //PIN_CAM1_DATA2–>Mode 4

赞(0)
未经允许不得转载:TI中文支持网 » RTOS|AM437x PRU如何直接访问GPO
分享到: 更多 (0)