2023/03/16 15:44
【MA35D1】在RTP程序里操作GPIO输出有哪些注意事项
1) 需要在TFA的dts里配置sspcc,将相应的GPIO配置给subm使用
找到您板子对应的dts文件,以BGA312 256MB的芯片为例在MA35D1_Buildroot/output/build/arm-trusted-firmware-custom/fdts/ma35d1-cpu800-wb-256m.dts
如图配置相应的GPIO为subm
注意可以在RTP的程序里读写GPIO对应的寄存器,如果SSPCC设置不正确就不能写对应的寄存器
2) 在A35 kernel加载完成以后运行RTP程序或打开Debug
3) 在RTP程序里打开对应的GPIO时钟使能
/* Unlock protected registers */
SYS_UnlockReg();
/* Enable IP clock */
CLK_EnableModuleClock(GPA_MODULE);
CLK_EnableModuleClock(GPB_MODULE);
CLK_EnableModuleClock(GPC_MODULE);
CLK_EnableModuleClock(GPD_MODULE);
CLK_EnableModuleClock(GPE_MODULE);
CLK_EnableModuleClock(GPF_MODULE);
CLK_EnableModuleClock(GPG_MODULE);
CLK_EnableModuleClock(GPH_MODULE);
CLK_EnableModuleClock(GPI_MODULE);
CLK_EnableModuleClock(GPJ_MODULE);
CLK_EnableModuleClock(GPK_MODULE);
CLK_EnableModuleClock(GPL_MODULE);
CLK_EnableModuleClock(GPM_MODULE);
CLK_EnableModuleClock(GPN_MODULE);
/* Update System Core Clock */
/* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
SystemCoreClockUpdate();
/* Lock protected registers */
SYS_LockReg();
4) 确认对应的GPIO的MFP寄存器值是0,作为GPIO功能
SYS->GPA_MFPL=0;
SYS->GPA_MFPH=0;
5) 设置对应的GPIO为输出功能
GPIO_SetMode(PA, BIT3, GPIO_MODE_OUTPUT);
6) 设置输出电平
两种方式
位操作
PA3 = 0;
或者字输出
PA->DOUT=0x55555555;此方式可以结合PA->DATMSK执行位操作
7) GPIO输出驱动能力可调
默认PA->DS和PA->UDS都是0,为最小驱动能力
驱动能力在0至7之间调整
最高为PA->DS=0x77777777;PA->UDS=0x77777777
8) 可以设置PA->SLEWCTL设置输出信号斜率
9) 可以通过设置PA->PUSEL设置管脚上拉下拉,注意上拉仅在输入模式和开楼模式下有效,下拉仅在准双向模式下有效。
10) 模拟IP的GPIO可以通过PA->DINOFF来关闭数字输入通道
11) 输入管脚可以设置PA->SMTEN打开施密特触发功能