Other Parts Discussed in Thread: AM4372
主题中讨论的其他器件:AM4372
工具/软件:Linux
团队、
我正在尝试切换 PRU0上的几个 GPIO。 我使用的是最新的 SDK。 配置如下:
DTS:
AM4372_IOPAD (0x9d0、PIN_OUTPUT | MUX_MODE3)/* CAM1_DATa8模式3 PRU*/
AM4372_IOPAD (0x9f0、PIN_OUTPUT | MUX_Mode4)/* CAM1_DATa2模式4 PRU *
AM4372_IOPAD (0x9f4、PIN_OUTPUT | MUX_Mode4) /* CAM1_DATa3模式4 PRU *
PRU0_1固件:
#define HOST_INT (((uint32_t) 1 << 31)
#define OUT_S (1 << 0) /*(AD24) CAM1_data8.pr0_pru1_GPO[0]*/
#define OUT_D (1 << 11) /*AE22 (CAM1_data3、pr0_pru1_gpo11、模式0x4)*/
#define OUT_C (1 << 10) /* AD21 (CAM1_data2、pr0_pru1_gpo10、模式0x4)*/
#define PRU_OUT_SET (x) {_R30 |=(x);}
#define PRU_OUT_CLR (x) {_R30 &&~(x);}
#define PRU_IN (x) (_R31和(x))
#define TO_ARM_HOST 18.
#define From_arm_host 19
/*
*使用名称'rpmsg-PRU'将探测找到的 rpmsg_PRU 驱动程序
*位于 linux-x.y.z/drivers/rpmsg/rpmsg_pru.c
*
#define CHAN_NAME "rpmsg-PRU"
#define CHAN_DESC "通道31"
#define CHAN_PORT 31
主(){
…………
…
PRU_rpmsg_init (&transport、&resourceTable.rpmsg_vring0、&resourceTable.rpmsg_vring1、TO_ARM_HOST、From_ARM_HOST);
/*使用传输结构在 PRU 和 ARM 用户空间之间创建 RPMsg 通道。 *
while (PRU_rpmsg_channel (RPMSG_NS_create、&transport、CHAN_NAME、CHAN_DESC、CHAN_PORT)!= PRU_RPMSG_SUCCESS);
while (1){
/*检查寄存器 R31的位30以查看 ARM 是否已启动我们*/
如果(__R31和 host_INT){
/*清除事件状态*/
CT_INTC.SICR_BIT.STATUS_CLR_INDEX = From_ARM_HOST;
/*接收所有可用消息,每次启动时可以发送多条消息*/
while (PRU_rpmsg_receive (&transport、&src、&dst、PAYLOAD、&len)== PRU_RPMSG_Success){
/*将邮件回送至我们刚刚收到的同一地址*/
// pru_rpmsg_send (&transport、dst、src、payload、len);
对于(i = 0;i < len;i++){
if (PAYLOAD[i]="S"|| PAYLOAD[i]="S"){
PRU_OUT_SET (OUT_S);
PRU_rpmsg_send (传输、dst、src、有效负载、len);
}
否则、如果(PAYLOAD[i]='d'|| PAYLOAD[i]='D'){
PRU_OUT_SET (OUT_D);
PRU_rpmsg_send (传输、dst、src、有效负载、len);
}
否则、如果(PAYLOAD[i]='c'|| PAYLOAD[i]='C'){
PRU_OUT_SET (OUT_C);
PRU_rpmsg_send (传输、dst、src、有效负载、len);
}
}
}
资源配置:
struct ch_map PRU_intc_map[]={18、3}、
{19、1}、
};
struct my_resource_table resourceTable ={
三、会议的结果
三、会议的报告
{
type_custom_type_pru_ints、
sizeof (struct fw_RSC_custom_ints)、
{/* PRU_INTS 版本*/
0x0000、
/*通道到主机映射,255表示未使用
* 通道0到主机0的映射(PRU0/1 R31位30)
*
host_unused、1、host_unused、3、host_unused、
host_unused、host_unused、host_unused、host_unused、host_unused、
/*映射到通道的设备数*/
(sizeof (PRU_INTC_MAP)/ sizeof (struct ch_map))、
/*指向包含映射事件的结构的指针*/
PRU_INTC_MAP、
}、
…………
…………
尝试从 Linux 用户空间发送命令 s、c、d (通过/dev/rpmsg_31)。 我能够发送每条命令(并且在 Linux 中也可以读回)、但这些行没有被切换。 我是否遗漏了什么?
此致、
四