找回密码
 立即注册
查看: 73|回复: 4

新问题来了,关于P_SW2 |= 0x80;的功效问题

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:104
  • 最近打卡:2025-08-07 07:23:26
已绑定手机

14

主题

43

回帖

614

积分

高级会员

积分
614
发表于 4 天前 | 显示全部楼层 |阅读模式
EAXSFR();
//P_SW2 |= 0x80; //使能访问 XFR,没有冲突不用关闭
PWMA_CCER2 = 0x00; //写 CCMRx 前必须先清零 CCERx 关闭通道
PWMA_CCMR4 = 0x60; //设置 CC4 为 PWMA 输出模式
PWMA_CCER2 = 0x40; //使能 CC4 通道
PWMA_CCR4 = 0; //设置占空比时间
PWMA_ARR = pwmzq-1; //设置周期时间11.0592M时约13.8K
PWMA_ENO = 0x80; //使能 PWM4N 端口输出
PWMA_PS = 0X00;
PWMA_BKR = 0x80; //使能主输出
PWMA_CR1 = 0x01; //开始计时
P3PU = 0x18;
EAXRAM();
以上代码,注释掉最后一行,上面的设置才有效。增加最下面这行,PWM就没有输出了。
在另外一个项目里面,我用EAXSFR()打开后设置了一些端口的4.1K上拉,完成立刻EAXRAM();结果是对的。

回复

使用道具 举报 送花

3

主题

2091

回帖

1030

积分

等待验证会员

积分
1030
发表于 4 天前 | 显示全部楼层
根据您提供的代码片段和现象描述,可以分析出以下几点:

1. PSW2 |= 0x80; 的作用  
   PSW2 |= 0x80; 是用于使能访问 XFR(寄存器交换功能)的指令。在某些微控制器中,XFR 功能允许通过特定的寄存器地址直接读写内部寄存器,这通常用于调试或特殊功能配置。该位设置后,系统将允许对 XFR 相关寄存器进行访问,但不会影响其他功能,因此无需关闭。

2. EAXSFR() 和 EAXRAM() 的作用  
EAXSFR();:该函数可能用于启用 XFR 模式,使得可以通过特定地址访问底层寄存器。
EAXRAM();:该函数可能用于恢复 RAM 访问权限,或者关闭 XFR 模式,从而恢复正常寄存器访问方式。

3. 注释掉 EAXRAM(); 后 PWM 正常工作  
   当 EAXRAM(); 被注释掉时,XFR 模式仍然保持开启状态,此时 PWM 配置能够正常执行并输出信号。这表明在 XFR 模式下,PWM 相关寄存器的配置是有效的。

4. 添加 EAXRAM(); 后 PWM 无输出  
   添加 EAXRAM(); 后,PWM 无法输出信号,说明该函数可能改变了寄存器访问方式,导致 PWM 配置未被正确写入。可能是由于在 EAXRAM(); 执行后,部分寄存器不再可写,或访问路径发生了变化,使得后续的 PWM 配置无效。

5. 另一个项目中使用 EAXSFR() 和 EAXRAM() 的情况  
   在另一个项目中,EAXSFR(); 用于打开 XFR 模式以设置端口上拉电阻,随后立即调用 EAXRAM();,结果正确。这说明在某些场景下,EAXRAM(); 可以安全地用于恢复寄存器访问,不影响已配置的寄存器状态。

6. 可能的问题点与建议  
寄存器访问冲突:在某些情况下,EAXRAM(); 可能会改变寄存器的访问方式,导致 PWM 配置未能正确写入。建议检查 EAXRAM(); 是否影响了 PWM 相关寄存器的访问权限。
顺序问题:确保 EAXRAM(); 的调用时机不会干扰 PWM 配置流程。如果 EAXRAM(); 在 PWM 配置之前或之后执行不当,可能导致配置失败。
测试与验证:建议在不同环境下测试 EAXRAM(); 对 PWM 输出的影响,确认其是否对特定寄存器产生副作用。

综上所述,PSW2 |= 0x80; 是用于使能 XFR 功能,而 EAXRAM(); 可能会影响寄存器访问方式,进而影响 PWM 配置的有效性。建议进一步验证 EAXRAM(); 的具体行为,并调整其调用位置以确保 PWM 配置的完整性。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:104
  • 最近打卡:2025-08-07 07:23:26
已绑定手机

14

主题

43

回帖

614

积分

高级会员

积分
614
发表于 4 天前 | 显示全部楼层
明白了,是关了后再给它赋值就无效了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-08-07 08:30:52
已绑定手机

86

主题

5848

回帖

1万

积分

超级版主

DebugLab

积分
10531
发表于 4 天前 | 显示全部楼层
初始化直接EAXSFR
没有外接SRAM芯片,就永远用不到EAXRAM,全部删掉
新手必读:
https://www.stcaimcu.com/thread-16535-1-1.html
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:550
  • 最近打卡:2025-08-07 08:50:02
已绑定手机

15

主题

1334

回帖

3702

积分

论坛元老

积分
3702
发表于 4 天前 | 显示全部楼层
头文件中有定义:
#define        EAXSFR()                P_SW2 |= 0x80                //    EAXFR = 1; 启用扩展SFR,禁用扩展RAM
#define        EAXRAM()                P_SW2 &= ~0x80        //    EAXFR =0;  启用扩展RAM,禁用扩展SFR


回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-7 12:19 , Processed in 0.123570 second(s), 70 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表