在《最新版LOOK程序包及例程包汇编(2011.7.24)》中,用LOOK_H来区分
两种头文件。
- #if LOOK_H == 0
- #include "NUC1xx.h"
- #include "NUC1xxM051Seriescfg.h"
- #else
- #include <nuc120re3an.h>
- using namespace nuvoton;
- #endif
LOOK_H=0时,采用的是新唐官方的NUC1xx.h和菜农的NUC1xxM051Seriescfg.h组合。
LOOK_H=1或2时,采用的是Lee老师的nuc120re3an.h。
在最新版LOOK程序包及例程包汇编(2011.7.24)内的Cortex.rar文件内有源码。
举例:
- #if LOOK_H == 0
- RTCs.RIER.Bits.TIER = 1;
- #else
- RTC.RIER().TIER = 1;
- #endif
可以看出他们之间的转换关系:
1.将"RTCs."改为"RTC.",即去掉"s"
2.将".Bits"改为“()”
在例如:
- #if LOOK_H == 0
- SYSs.IPRSTC2.Bits.UART0_RST = 1;
- SYSs.IPRSTC2.Bits.UART0_RST = 0;
- UART0s.FCR.Regs |= (1 << UART_FCR_TFR) | (1 << UART_FCR_RFR);
- UART0s.LCR.Regs = 3 << UART_LCR_WLS; // 8bits
- UART0s.BAUD.Regs = (0x66 << UART_BAUD_BRD)
- | (1 << UART_BAUD_DIV_X_ONE)
- | (1 << UART_BAUD_DIV_X_EN); // 115200
- #else
- SYS.IPRSTC2()
- .UART0_RST(1);
- SYS.IPRSTC2()
- .UART0_RST(0);
- UART0.FCR()
- .TFR(1)
- .RFR(1);
- UART0.LCR(0)
- .WLS(3); // 8bits
- UART0.BAUD(0)
- .BRD(0x66)
- .DIV_X_ONE(1)
- .DIV_X_EN(1); // 115200
- #endif
可以看出老师的写法非常好,简洁。
其中:
- UART0s.FCR.Regs |= (1 << UART_FCR_TFR) | (1 << UART_FCR_RFR);
的"|="就是置位,只设置FCR寄存器中的两位,其他位不改的。
此时,老师的头文件就显示出了优势:
- UART0.FCR()
- .TFR(1)
- .RFR(1);
再例如:
- UART0s.LCR.Regs = 3 << UART_LCR_WLS;
注意和上例不同,“=”,即赋值或覆盖
此时注意老师的写法!
即WLS位域为3,其他全为0.
再例如:
- UART0s.BAUD.Regs = (0x66 << UART_BAUD_BRD)
- | (1 << UART_BAUD_DIV_X_ONE)
- | (1 << UART_BAUD_DIV_X_EN); // 115200
和上例基本一样,就是多位域操作。
老师的写法为:
- UART0.BAUD(0)
- .BRD(0x66)
- .DIV_X_ONE(1)
- .DIV_X_EN(1);
最后大家看看老师的头文件之精妙在何处:
位域表达:
- RTCs.TLR.Bits.HR10 = Hour / 10;
- RTCs.TLR.Bits.HR1 = Hour % 10;
- RTCs.TLR.Bits.MIN10 = Minute / 10;
- RTCs.TLR.Bits.MIN1 = Minute % 10;
- RTCs.TLR.Bits.SEC10 = Second / 10;
- RTCs.TLR.Bits.SEC1 = Second % 10;
老师用一句的表达方法:
- RTC.TLR(0)
- .HR10(Hour / 10, false)
- .HR1(Hour % 10, false)
- .MIN10(Minute / 10, false)
- .MIN1(Minute % 10, false)
- .SEC10(Second / 10, false)
- .SEC1(Second % 10, false);
|