关于SC14XX系列IO口注意的地方

本文探讨了在eboot环境下S3C2440A微控制器的GPIO操作中出现的延时问题。作者发现,在修改GPIO状态后如果不加入延时,则状态改变可能无法生效。通过详细分析,提出了解决方案,并讨论了不同代码实现方式的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在eboot下我写了如下代码:
volatile S3C2440A_IOPORT_REG *s2440IOP ;
s2440IOP = (S3C2440A_IOPORT_REG *)OALPAtoVA(S3C2440A_BASE_REG_PA_IOPORT, FALSE);

s2440IOP->GPFDAT &=0xFB;
mdelay(1);//如果我去掉这个延时,会导致s2440IOP->GPFDAT &=0xFB无效,加上延时才有效,也就是bit[2]不会等于零
s2440IOP->GPFDAT &=0xFE;

mdelay(1);//如果我去掉这个延时,会导致s2440IOP->GPFDAT &=0xFB无效,加上延时才有效
——这个问题我觉得很奇怪,对于地址,是uncache地址了,怎么2440速度这么慢呢!
我觉得很不解,加个延时,啥都好了,不会2440会这么奇怪吧。

还有,如果这样写 s2440IOP->GPFDAT=(s2440IOP->GPFDAT&0xFB)&0xFE;又完全正确,真是神了。

还有
// Set GPF0  as output pin
s2440IOP->GPFCON &=~(1 < <1);
s2440IOP->GPFCON |=(1 < <0);

这样一个与与一个或搭配又完全正确,

 

1. 建议 LZ 将 compiler 出来的 assembly code 拿来看看, 来判断是否为 Optimization 的问题.

2.

C/C++ code
s2440IOP->GPGCON &= ~(3 < < 8);Set LCD_PWREN as output s2440IOP->GPGCON |= (1 < < 8);


  与
 

C/C++ code
s2440IOP->GPGCON = (s2440IOP->GPGCON & ~(3 << 8)) | (1 << 8);


是不同的, 一个是两次 assign 的动作, 一个只有一次, 至於两次 assign 的动作中间的时间会发生什麽事, 那是 programmer 须注意的.

3. GPxDAT 的动作是 Read-Modify-Write, GPIO 若 driving 能力不强时, 则状态改变的 slope 可能过大, 故未作适当的 delay 再去读时就有可能会读到还未完全转态的状态.

Paul, Chao @ Techware

3. GPxDAT 的动作是 Read-Modify-Write, GPIO 若 driving 能力不强时, 则状态改变的 slope 可能过大, 故未作适当的 delay 再去读时就有可能会读到还未完全转态的状态.


想想解释的不清楚, 再多说一遍
s2440IOP->GPFDAT &=0xFB;
s2440IOP->GPFDAT &=0xFE;

LZ 要的是在 GPIO PF bit 2 先输出 0, 而後再将 bit0 输出 0, 若假设 GPF2 其转态速度为 1 mV/nS, 该指令执行时间为 500nS, 则 BIT2 输出 0 後最多再 500nS, 其就会再读一遍 GPFDAT, 则此时该电位为 3.3V - (1mV/nS * 500nS) = 3.3V - 0.5V = 2.8V, 故仍为 high.

所以 LZ 要解此问题, 应将其 code 改为

C/C++ code
DWORD dwGPFDAT = s2440IOP->GPFDAT; dwGPFDAT &= ~(1 << 2); s2440IOP->GPFDAT = dwGPFDAT; dwGPFDAT &= ~(1 << 0); s2440IOP->GPFDAT = dwGPFDAT;



或是想办法将 GPF2 的转态速度增加为 10 mV/nS.

Paul, Chao @ Techware

 

 

 

 

 

内容概要:本文探讨了在MATLAB/SimuLink环境中进行三相STATCOM(静态同步补偿器)无功补偿的技术方法及其仿真过程。首先介绍了STATCOM作为无功功率补偿装置的工作原理,即通过调节交流电压的幅值和相位来实现对无功功率的有效管理。接着详细描述了在MATLAB/SimuLink平台下构建三相STATCOM仿真模型的具体步骤,包括创建新模型、添加电源和负载、搭建主电路、加入控制模块以及完成整个电路的连接。然后阐述了如何通过对STATCOM输出电压和电流的精确调控达到无功补偿的目的,并展示了具体的仿真结果分析方法,如读取仿真数据、提取关键参数、绘制无功功率变化曲线等。最后指出,这种技术可以显著提升电力系统的稳定性与电能质量,展望了STATCOM在未来的发展潜力。 适合人群:电气工程专业学生、从事电力系统相关工作的技术人员、希望深入了解无功补偿技术的研究人员。 使用场景及目标:适用于想要掌握MATLAB/SimuLink软件操作技能的人群,特别是那些专注于电力电子领域的从业者;旨在帮助他们学会建立复杂的电力系统仿真模型,以便更好地理解STATCOM的工作机制,进而优化实际项目中的无功补偿方案。 其他说明:文中提供的实例代码可以帮助读者直观地了解如何从零开始构建一个完整的三相STATCOM仿真环境,并通过图形化的方式展示无功补偿的效果,便于进一步的学习与研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值