【432楼】 machao
积分:5547
派别:
等级:------
来自:
| 回复【431楼】hotpower 菜农
马潮教授:
俺已将nuc1xx和m05x的头文件做完。
由于它们都属于cortex-m0,前者无ebi接口,后者无usb,rtc,i2s,can等模块。
故后者是前者的一个子集。
前者用了很多的时间,后者只用了不到两个小时,几乎是全部转抄。
所以俺准备将其和合为一个通用的头文件,内部自动识别。
-----------------------------------------------------------------------
谢谢你的捧场。
我喜欢从最底层开始玩(熟悉)东西。比如先做转换板,下载器等。
开始还是以直接寄存器操作为主,这样可以更加了解芯片的特点和使用的方法与技巧。
比如下面的PWM初始化代码:
//PWM设置:使用B组4个PWM(4/5/6/7)输出P2.4/P2.5/P2.6/P2.7
P2_MFP = 0x0000f000; // P2.4/P2.5/P2.6/P2.7切换成PWM输出
P2_PMD = 0x000055ff; // P2.4/P2.5/P2.6/P2.7输出模式
CLKSEL2 = 0xFFFFFFAF; //0xFFFFFFAC; // 选择PWM(4/5/6/7)时钟输入为HCLK
APBCLK |= PWM45_CLKEN | PWM67_CLKEN|FDIV_CLKEN; // 同步开启PWM4/5/6/7 工作
FRQDIV = 0x00000012;
PPRB = 0x00000101; // 预分频2(PPR+1)
CSRB = 0x00004444; // 选择CSR3/CSR2/CSR1/CSR0为1,1分频for pwm7/6/5/4
PCRB = 0x08080808; // 设置PWM5/6/7/8 为循环模式
CNR0B = 0x000000ff;
CMR0B = 0x00000080;
CNR1B = 0x000000ff;
CMR1B = 0x00000080;
CNR2B = 0x000000ff;
CMR2B = 0x00000080;
CNR3B = 0x000000ff;
CMR3B = 0x00000080;
POEB = 0x0000000F;
PCRB |= 0x01010101; // PWM5/6/7/8启动
在直接调试中就发现,开启PWM的时钟(下面2句)必须放在设置PWM相关寄存器的前面。如果放在后面,那么前面设置PWM相关寄存器的操作根本就是无效的!也就是说,必须先开启PWM的时钟,然后才能设置PWM的相关寄存器。这个问题我看了多遍手册,没有发现有解释和说明。
CLKSEL2 = 0xFFFFFFAF; //0xFFFFFFAC; // 选择PWM(4/5/6/7)时钟输入为HCLK
APBCLK |= PWM45_CLKEN | PWM67_CLKEN|FDIV_CLKEN; // 同步开启PWM4/5/6/7 工作
由于直接对寄存器操作,单步在线调试方便,也非常容易找到问题所在。 |
|