Part Number: PROCESSOR-SDK-AM437X
Other Parts Discussed in Thread: AM4376
Tool/software: TI-RTOS
My project need to use the PRU pins directly input and output, CPU AM4376, processor_sdk_rtos_am437x_4_03_00_05, CCS7.4.0, pinmux configuration as follow:
static pinmuxPerCfg_t gPru_icss1PinCfg[] =
{
{
/* MyPRU_PRUSS12 -> pr1_pru0_gpo[10] -> E11 */
PIN_GPMC_AD12, (uint16_t)PINMUX_SS_PRU_ICSS_PRU0, \
( \
PIN_MODE(9) | \
((PIN_PULL_UD_DIS | PIN_PULL_UP_EN | PIN_DS_VALUE_OVERRIDE_EN | PIN_DS_OP_DIS | PIN_DS_PULL_UP_EN) & \
(~PIN_RX_ACTIVE & ~PIN_DS_OP_VAL_1 & ~PIN_DS_PULL_UD_EN & ~PIN_WAKE_UP_EN))
) \
},
{
/* MyPRU_PRUSS12 -> pr1_pru0_gpo[11] -> C11 */
PIN_GPMC_AD13, (uint16_t)PINMUX_SS_PRU_ICSS_PRU0, \
( \
PIN_MODE(9) | \
((PIN_PULL_UD_DIS | PIN_PULL_UP_EN | PIN_DS_VALUE_OVERRIDE_EN | PIN_DS_OP_DIS | PIN_DS_PULL_UP_EN) & \
(~PIN_RX_ACTIVE & ~PIN_DS_OP_VAL_1 & ~PIN_DS_PULL_UD_EN & ~PIN_WAKE_UP_EN))
) \
},
{
/* MyPRU_PRUSS12 -> pr1_pru0_gpi[16] -> B11 */
PIN_GPMC_AD14, (uint16_t)PINMUX_SS_PRU_ICSS_PRU0, \
( \
PIN_MODE(6) | \
((PIN_PULL_UD_DIS | PIN_PULL_UP_EN | PIN_RX_ACTIVE | PIN_DS_VALUE_OVERRIDE_EN | PIN_DS_OP_DIS | PIN_DS_PULL_UP_EN) & \
(~PIN_DS_OP_VAL_1 & ~PIN_DS_PULL_UD_EN & ~PIN_WAKE_UP_EN))
) \
},
{
/* MyUART_PRUSS12 -> pr1_uart0_rxd -> K21 */
PIN_UART1_RXD, (uint16_t)PINMUX_SS_PRU_ICSS_UART0, \
( \
PIN_MODE(5) | \
((PIN_PULL_UD_DIS | PIN_PULL_UP_EN | PIN_RX_ACTIVE | PIN_DS_VALUE_OVERRIDE_EN | PIN_DS_OP_DIS | PIN_DS_PULL_UP_EN) & \
(~PIN_DS_OP_VAL_1 & ~PIN_DS_PULL_UD_EN & ~PIN_WAKE_UP_EN))
) \
},
{
/* MyUART_PRUSS12 -> pr1_uart0_txd -> L21 */
PIN_UART1_TXD, (uint16_t)PINMUX_SS_PRU_ICSS_UART0, \
( \
PIN_MODE(5) | \
((PIN_PULL_UD_DIS | PIN_PULL_UP_EN | PIN_DS_VALUE_OVERRIDE_EN | PIN_DS_OP_DIS | PIN_DS_PULL_UP_EN) & \
(~PIN_RX_ACTIVE & ~PIN_DS_OP_VAL_1 & ~PIN_DS_PULL_UD_EN & ~PIN_WAKE_UP_EN))
) \
},
{PINMUX_INVALID_PIN}
};
and when the program running, I get the register value in ARM as follow:
CONTROL_MODULE_CTRL_CONF_GPMC_AD12 = 0x13030009
CONTROL_MODULE_CTRL_CONF_GPMC_AD13 = 0x13030009
CONTROL_MODULE_CTRL_CONF_GPMC_AD14 = 0x13070006
I get the register value in PRU as follow:
PRU_ICSS1_CFG_PRU_ICSS_CFG_GPCFG0 = 0x00000000
PRU_ICSS1_CFG_PRU_ICSS_CFG_GPCFG1 = 0x02000000
the program in PRU_ICSS1_PRU0(example PRU_gpioToggle, pru-addon-v4.0) as follow:
volatile uint32_t gpio;
uint32_t i;
gpio = 0xFFFF;
__R30 = gpio;
i = __R31;
now, pr1_pru0_gpo[10] and pri_pru0_gpo[11] are always 0. and pri_pru0_gpi[16] can work orderly.
when I change pinmux pr1_pru0_gpo[10] and pri_pru0_gpo[11] to pr1_pru0_gpi[10] and pri_pru0_gpi[11], this two pins can not get the input value.
what's wrong with me? may I lost something?