[LOOK] LOOK例程中两种头文件的比对和转换方法

[复制链接]
2656|0
 楼主| hotpower 发表于 2011-7-25 22:06 | 显示全部楼层 |阅读模式
tc, NUC, RS, se, RTC
在《最新版LOOK程序包及例程包汇编(2011.7.24)》中,用LOOK_H来区分
两种头文件。
  1. #if LOOK_H == 0
  2. #include "NUC1xx.h"
  3. #include "NUC1xxM051Seriescfg.h"
  4. #else
  5. #include <nuc120re3an.h>
  6. using namespace nuvoton;
  7. #endif

LOOK_H=0时,采用的是新唐官方的NUC1xx.h和菜农的NUC1xxM051Seriescfg.h组合。
LOOK_H=1或2时,采用的是Lee老师的nuc120re3an.h。

最新版LOOK程序包及例程包汇编(2011.7.24)内的Cortex.rar文件内有源码。


举例:

  1. #if LOOK_H == 0
  2. RTCs.RIER.Bits.TIER = 1;
  3. #else
  4. RTC.RIER().TIER = 1;
  5. #endif



可以看出他们之间的转换关系:
1.将"RTCs."改为"RTC.",即去掉"s"
2.将".Bits"改为“()”

在例如:
  1. #if LOOK_H == 0
  2. SYSs.IPRSTC2.Bits.UART0_RST = 1;
  3. SYSs.IPRSTC2.Bits.UART0_RST = 0;
  4. UART0s.FCR.Regs |= (1 << UART_FCR_TFR) | (1 << UART_FCR_RFR);
  5. UART0s.LCR.Regs = 3 << UART_LCR_WLS; // 8bits
  6. UART0s.BAUD.Regs = (0x66 << UART_BAUD_BRD)
  7. | (1 << UART_BAUD_DIV_X_ONE)
  8. | (1 << UART_BAUD_DIV_X_EN); // 115200
  9. #else
  10. SYS.IPRSTC2()
  11. .UART0_RST(1);
  12. SYS.IPRSTC2()
  13. .UART0_RST(0);
  14. UART0.FCR()
  15. .TFR(1)
  16. .RFR(1);
  17. UART0.LCR(0)
  18. .WLS(3); // 8bits
  19. UART0.BAUD(0)
  20. .BRD(0x66)
  21. .DIV_X_ONE(1)
  22. .DIV_X_EN(1); // 115200
  23. #endif


可以看出老师的写法非常好,简洁。
其中:
  1. UART0s.FCR.Regs |= (1 << UART_FCR_TFR) | (1 << UART_FCR_RFR);

的"|="就是置位,只设置FCR寄存器中的两位,其他位不改的。
此时,老师的头文件就显示出了优势:
  1. UART0.FCR()
  2. .TFR(1)
  3. .RFR(1);


再例如:
  1. UART0s.LCR.Regs = 3 << UART_LCR_WLS;

注意和上例不同,“=”,即赋值或覆盖
此时注意老师的写法!
  1. UART0.LCR(0).WLS(3);

即WLS位域为3,其他全为0.

再例如:
  1. UART0s.BAUD.Regs = (0x66 << UART_BAUD_BRD)
  2. | (1 << UART_BAUD_DIV_X_ONE)
  3. | (1 << UART_BAUD_DIV_X_EN); // 115200


和上例基本一样,就是多位域操作。
老师的写法为:
  1. UART0.BAUD(0)
  2. .BRD(0x66)
  3. .DIV_X_ONE(1)
  4. .DIV_X_EN(1);




最后大家看看老师的头文件之精妙在何处:


位域表达:
  1.   RTCs.TLR.Bits.HR10 = Hour / 10;
  2.   RTCs.TLR.Bits.HR1 = Hour % 10;
  3.   RTCs.TLR.Bits.MIN10 = Minute / 10;
  4.   RTCs.TLR.Bits.MIN1 = Minute % 10;
  5.   RTCs.TLR.Bits.SEC10 = Second / 10;
  6.   RTCs.TLR.Bits.SEC1 = Second % 10;



老师用一句的表达方法:
  1.   RTC.TLR(0)
  2.      .HR10(Hour / 10, false)
  3.      .HR1(Hour % 10, false)
  4.      .MIN10(Minute / 10, false)
  5.      .MIN1(Minute % 10, false)
  6.      .SEC10(Second / 10, false)
  7.      .SEC1(Second % 10, false);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:[url=http://www.21ic.com/tools/HotWC3_V1.23.html]

1460

主题

21617

帖子

508

粉丝
快速回复 在线客服 返回列表 返回顶部