|
您好,之前看PRU资料,GPIO的操作都是对R30寄存器进行操作的,阅读创龙现在的代码未发现对R30寄存器进行操作,是哪里进行了映射了吗?
这样如何到R30寄存器的。
#include <stdint.h>
#include <pru_cfg.h>
#include "resource_table_empty.h"
#include "dra7_pinctrl.h"
/* LED port address */
#define GPIO3_BASE_ADDR 0x48057000
#define GPIO_OE_OFFSET 0x134
#define GPIO_CLRDATAOUT_OFFSET 0x190
#define GPIO_SETDATAOUT_OFFSET 0x194
//volatile register uint32_t __R30;
volatile pruCfg CT_CFG __attribute__((cregister("PRU_CFG", near), peripheral));
int main(void) {
uint32_t i;
uint32_t value;
/* GPI Mode 0, GPO Mode 0 */
CT_CFG.GPCFG0 = 0;
/* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */
CT_CFG.SYSCFG_bit.STANDBY_INIT = 0;
uint32_t led_set_addr;
uint32_t led_clr_addr;
uint32_t gpio3_reg_oe_addr;
led_set_addr = GPIO3_BASE_ADDR + GPIO_SETDATAOUT_OFFSET;
led_clr_addr = GPIO3_BASE_ADDR + GPIO_CLRDATAOUT_OFFSET;
gpio3_reg_oe_addr = GPIO3_BASE_ADDR + GPIO_OE_OFFSET;
*(uint32_t*)led_clr_addr |= 1 << 19; //turn down LED0 (GPIO3_19)
*(uint32_t*)gpio3_reg_oe_addr &= ~(1<<21 | 1<< 20 | 1<<19); // gpio3_19/gpio3_20/gpio3_21 as output pin
/* pinmux configuration */
*(uint32_t*)CTRL_CORE_PAD_VIN1A_D15_ADDR = (PIN_OUTPUT_PULLUP | MUX_MODE14);
*(uint32_t*)CTRL_CORE_PAD_VIN1A_D16_ADDR = (PIN_OUTPUT_PULLUP | MUX_MODE14);
*(uint32_t*)CTRL_CORE_PAD_VIN1A_D17_ADDR = (PIN_OUTPUT_PULLUP | MUX_MODE14);
while(1) {
for (i = 0; i < 3; i++) {
value = 1 << (i + 19);
*(uint32_t*)led_set_addr |= value;
__delay_cycles(100000000); // half-second delay
*(uint32_t*)led_clr_addr |= value;
__delay_cycles(100000000); // half-second delay
}
}
/* Halt the PRU core - shouldn't get here */
//__halt();
}
|
|