一笔长空 发表于 2023-7-8 12:06:08

【已解决】PCA模块问题求助,PCA3不能开启

本帖最后由 一笔长空 于 2023-7-15 16:34 编辑

芯片是8A8K64D4,内部有4路pca模块,我要用其8位PWM功能,因为只用一路信号所以我就开启了第四路,也就是PCA模块3,问题来了,怎么设置都不能启动,同样的代码模块0,1和2都可以,代码改成模块3的就没信号输出,研究一天了,太奇怪了.
下面附代码:      
    P_SW1|=0X10;
    CCON = 0x00;
    CMOD = 0x08;                              //PCA时钟为系统时钟
    CL = 0x00;
    CH = 0x00;
    CCAPM3 = 0x42;                              //PCA模块3为PWM工作模式
    PCA_PWM3 = 0x00;                            //PCA模块3输出8位PWM
    CCAP3L = 0x20;                              
    CCAP3H = 0x20;
    CR=1;//启动pca
这个代码P26口始终没输出,也测试了P26口没有坏,推挽模式和准双向都试了都不行,而把代码里的数字3全部换成数字2,其它的什么都不动,也就是启用模块2他就正常了,P25口就能量到信号,求大佬解答



zhp 发表于 2023-7-8 13:31:32

一笔长空 发表于 2023-7-8 12:09
一模一样的代码,为什么模块0.1.2,可以,模块3就不行,模块3是需要什么特殊设置吗 ...

模块3的寄存器分配在XFR区域


配置模块3,必须间P_SW2的最高为设置为1,代码如下:
P_SW2 |= 0x80;

一笔长空 发表于 2023-7-8 12:09:44

一模一样的代码,为什么模块0.1.2,可以,模块3就不行,模块3是需要什么特殊设置吗{:4_167:}

一笔长空 发表于 2023-7-8 15:02:17

zhp 发表于 2023-7-8 13:31
模块3的寄存器分配在XFR区域




非常感谢版主您的解答,要是没有您告诉我哪怕再研究一个月把PDF翻烂了到最后不用STC了也不知道答案,现在连pwm模块无法启用的问题也解决了,还以为是片子没这功能或者坏了,再次感谢!
是不是地址为1字节的寄存器都是SFR,地址为2字节的都是XFR使用时要将EAXFR置1?

zhp 发表于 2023-7-8 16:46:02

一笔长空 发表于 2023-7-8 15:02
非常感谢版主您的解答,要是没有您告诉我哪怕再研究一个月把PDF翻烂了到最后不用STC了也不知道答案,现在连 ...

Q:是不是地址为1字节的寄存器都是SFR,地址为2字节的都是XFR使用时要将EAXFR置1?
A:是这样的

一笔长空 发表于 2023-7-8 22:27:29

zhp 发表于 2023-7-8 16:46
Q:是不是地址为1字节的寄存器都是SFR,地址为2字节的都是XFR使用时要将EAXFR置1?
A:是这样的 ...

感谢版主zhp,问题解决了,太感谢了,祝您生活愉快,再见

梁工 发表于 2023-7-13 15:57:29


一笔长空 发表于 2023-7-15 15:39:33

梁工 发表于 2023-7-13 15:57


感谢梁老师,很好的程序比自己写的好多了。
请问有没有关于ID号加密的范例程序或者应用程序,STC-ISP里只有读取ID号的,具体怎么用这个ID号进行加密不太明白,去了好多论坛也没找到具体程序,现在怎么在rom留出7字节的空间不知道如何操作,ID号校验不通过如何销毁程序不会操作,希望有这方面的范例程序,感谢老师。

梁工 发表于 2023-7-15 16:20:23

一笔长空 发表于 2023-7-15 15:39
感谢梁老师,很好的程序比自己写的好多了。
请问有没有关于ID号加密的范例程序或者应用程序,STC-ISP里只 ...

STC ISP里的ID号加密的“帮助”里有详细使用说明。





ID号加密是根据用户所设定的算法对ID号的7个字节进行分别运算,每种加密算法最多可以进行4次
不同的运算,运算符不分优先级,从前到后依次进行4次运算,对于同一个加密算法,ID号的7个字节是
分别使用此算法进行运算,运算完成后会得到加密后的7个字节,在下载用户代码时,加密后的7个字节
会自动写入到用户所指定的FLASH中
例如:
当前芯片内部的ID号为 : 01H 02H 03H 04H 05H 06H 07H
选择的加密算法为         : <<1, +2, *3, ^4
设定的存储地址为         : 0x1000
经加密运算后的ID号为:08H 16H 1CH 1AH 20H 2EH 34H
下载程序过程中,加密的ID号会被写入到FLASH的0x1000~0x1006地址中
08H写入到0x1000, 16H写入到0x1001, 1CH写入到0x1002, 1AH写入到0x1003, 20H写入到0x1004,
2EH写入到0x1005, 34H写入到0x1006

目前版本提供两种加密方式,可将ID号使用两种不同的方式加密后写入到不同的地址中每种加密方式
中可进行4步运算,每一步运算可选择下面的7种运算方法:
+ : 加法运算- : 减法运算* : 乘法运算/ : 除法运算
<<: 左移运算>>: 右移运算^ : 异或运算

对于运算操作数,只接受10进制数的输入,有效的数据为0~255,超出范围的数,高位会被自动舍弃.
例如输入257(102H),则实际参加运算的术为2(02H)
所有的运算都是基于单字节的,高低字节之间不会产生进位和借位,即低字节运算后如果产生进位
或借位将直接舍弃,而不参与高字节的运算

例如:
如果ID号为       : 01 02 03 04 ff fe fd
加密方式为       : "+255, +0, +0, +0"
则加密后的数据为 : 00 01 02 03 fe fd fc

注意事项:
若是将ID号加密和程序加密后传输这两种功能结合起来同时使用时,则必须在原代码加密前,将需
要写入加密ID号的地址空间预留为FF,然后在对程序文件进行加密(若下载时需要将HEX空白区域
填充为00时,也需要执行此操作将区域保留)
例如:
    我现在需要将ID号加密后写入到程序空间1000H开始的地址,那么我必须在我的源代码中,
    将1000H~1006H这7个字节保留,并定义为FFH(不能为00H)


一笔长空 发表于 2023-7-15 16:25:06

梁工 发表于 2023-7-15 16:20
STC ISP里的ID号加密的“帮助”里有详细使用说明。




感谢梁老师,现在知道原理后不知道具体代码怎么写,比如我现在需要将ID号加密后写入到程序空间1000H开始的地址,那么我必须在我的源代码中,将1000H~1006H这7个字节保留,并定义为FFH,像这种操作如何用C语言写,如何有范例程序就再好不过了
页: [1] 2 3
查看完整版本: 【已解决】PCA模块问题求助,PCA3不能开启