[LOOK] 两种头文件优化16个例程结果对比

[复制链接]
3638|10
 楼主| hotpower 发表于 2011-7-6 20:59 | 显示全部楼层 |阅读模式
se, TE, NUC, ease, sd
本帖最后由 hotpower 于 2011-7-7 01:29 编辑

例程详见:
Lee老师LOOK测试版及新头文件和相关测试例程

NUC1xxM051Seriescfg.h位域方法与Lee老师的头文件优化结果对比
  1. -----------------------------------------------------------------
  2. NUC1xxM051Seriescfg.h (1)
  3. -----------------------------------------------------------------
  4. text data bss dec hex filename
  5. 3308 392 1272 4972 136c Debug/Look_Flag.elf
  6. 2172 232 1272 3676 e5c Release/Look_Flag.elf
  7. -----------------------------------------------------------------
  8. nuc120re3an.h 优化字节数2172-2168=4
  9. -----------------------------------------------------------------
  10. text data bss dec hex filename
  11. 4528 392 1272 6192 1830 Debug/Look_Flag.elf
  12. 2168 232 1272 3672 e58 Release/Look_Flag.elf
  13. -----------------------------------------------------------------
  14. NUC1xxM051Seriescfg.h (2)
  15. -----------------------------------------------------------------
  16. text data bss dec hex filename
  17. 3344 352 1112 4808 12c8 Debug/LOOK_MMBOX.elf
  18. 2152 208 1112 3472 d90 Release/LOOK_MMBOX.elf
  19. -----------------------------------------------------------------
  20. nuc120re3an.h 优化字节数2152-2136=16
  21. -----------------------------------------------------------------
  22. text data bss dec hex filename
  23. 4028 352 1112 5492 1574 Debug/LOOK_MMBOX.elf
  24. 2136 208 1112 3456 d80 Release/LOOK_MMBOX.elf
  25. -----------------------------------------------------------------
  26. NUC1xxM051Seriescfg.h (3)
  27. -----------------------------------------------------------------
  28. text data bss dec hex filename
  29. 2340 272 656 3268 cc4 Debug/LOOKDemo.elf
  30. 1544 128 656 2328 918 Release/LOOKDemo.elf
  31. -----------------------------------------------------------------
  32. nuc120re3an.h 优化字节数1544-1544=0
  33. -----------------------------------------------------------------
  34. text data bss dec hex filename
  35. 2372 272 656 3300 ce4 Debug/LOOKDemo.elf
  36. 1544 128 656 2328 918 Release/LOOKDemo.elf
  37. -----------------------------------------------------------------
  38. NUC1xxM051Seriescfg.h (4)
  39. -----------------------------------------------------------------
  40. text data bss dec hex filename
  41. 3760 400 1304 5464 1558 Debug/Look_Mutex.elf
  42. 2440 224 1312 3976 f88 Release/Look_Mutex.elf
  43. -----------------------------------------------------------------
  44. nuc120re3an.h 优化字节数2440-2432=8
  45. -----------------------------------------------------------------
  46. text data bss dec hex filename
  47. 5648 400 1304 7352 1cb8 Debug/Look_Mutex.elf
  48. 2432 224 1312 3968 f80 Release/Look_Mutex.elf
  49. -----------------------------------------------------------------
  50. NUC1xxM051Seriescfg.h (5)
  51. -----------------------------------------------------------------
  52. text data bss dec hex filename
  53. 2460 240 744 3444 d74 Debug/LOOK_IDLE.elf
  54. 1652 136 744 2532 9e4 Release/LOOK_IDLE.elf
  55. -----------------------------------------------------------------
  56. nuc120re3an.h 优化字节数1652-1644=8
  57. -----------------------------------------------------------------
  58. text data bss dec hex filename
  59. 3104 240 744 4088 ff8 Debug/LOOK_IDLE.elf
  60. 1644 136 744 2524 9dc Release/LOOK_IDLE.elf
  61. -----------------------------------------------------------------
  62. NUC1xxM051Seriescfg.h (6)
  63. -----------------------------------------------------------------
  64. text data bss dec hex filename
  65. 2636 328 1024 3988 f94 Debug/LOOK_SEM.elf
  66. 1868 184 1024 3076 c04 Release/LOOK_SEM.elf
  67. -----------------------------------------------------------------
  68. nuc120re3an.h 优化字节数1868-1852=16
  69. -----------------------------------------------------------------
  70. text data bss dec hex filename
  71. 4088 328 1024 5440 1540 Debug/LOOK_SEM.elf
  72. 1852 184 1024 3060 bf4 Release/LOOK_SEM.elf
  73. -----------------------------------------------------------------
  74. NUC1xxM051Seriescfg.h (7)
  75. -----------------------------------------------------------------
  76. text data bss dec hex filename
  77. 4224 440 1560 6224 1850 Debug/COND.elf
  78. 2724 248 1568 4540 11bc Release/COND.elf
  79. -----------------------------------------------------------------
  80. nuc120re3an.h 优化字节数2724-2712=12
  81. -----------------------------------------------------------------
  82. text data bss dec hex filename
  83. 4812 440 1560 6812 1a9c Debug/COND.elf
  84. 2712 248 1568 4528 11b0 Release/COND.elf
  85. -----------------------------------------------------------------
  86. NUC1xxM051Seriescfg.h (8)
  87. -----------------------------------------------------------------
  88. text data bss dec hex filename
  89. 2836 328 928 4092 ffc Debug/Look_KeyLed.elf
  90. 1896 168 928 2992 bb0 Release/Look_KeyLed.elf
  91. -----------------------------------------------------------------
  92. nuc120re3an.h 优化字节数1896-1896=0
  93. -----------------------------------------------------------------
  94. text data bss dec hex filename
  95. 4508 328 928 5764 1684 Debug/Look_KeyLed.elf
  96. 1896 168 928 2992 bb0 Release/Look_KeyLed.elf
  97. -----------------------------------------------------------------
  98. NUC1xxM051Seriescfg.h (9)
  99. -----------------------------------------------------------------
  100. text data bss dec hex filename
  101. 2440 344 928 3712 e80 Debug/led.elf
  102. 1744 144 928 2816 b00 Release/led.elf
  103. -----------------------------------------------------------------
  104. nuc120re3an.h 优化字节数1744-1744=0
  105. -----------------------------------------------------------------
  106. text data bss dec hex filename
  107. 2776 344 928 4048 fd0 Debug/led.elf
  108. 1744 144 928 2816 b00 Release/led.elf
  109. -----------------------------------------------------------------
  110. NUC1xxM051Seriescfg.h (10)
  111. -----------------------------------------------------------------
  112. text data bss dec hex filename
  113. 3156 328 928 4412 113c Debug/Look_Mbox_KeyLed.elf
  114. 2052 168 928 3148 c4c Release/Look_Mbox_KeyLed.elf
  115. -----------------------------------------------------------------
  116. nuc120re3an.h 优化字节数2052-2044=8
  117. -----------------------------------------------------------------
  118. text data bss dec hex filename
  119. 5712 328 928 6968 1b38 Debug/Look_Mbox_KeyLed.elf
  120. 2044 168 928 3140 c44 Release/Look_Mbox_KeyLed.elf
  121. -----------------------------------------------------------------
  122. NUC1xxM051Seriescfg.h (11)
  123. -----------------------------------------------------------------
  124. text data bss dec hex filename
  125. 2392 304 904 3600 e10 Debug/LOOK_YIELD.elf
  126. 1724 136 904 2764 acc Release/LOOK_YIELD.elf
  127. -----------------------------------------------------------------
  128. nuc120re3an.h 优化字节数1724-1716=8
  129. -----------------------------------------------------------------
  130. text data bss dec hex filename
  131. 2768 304 904 3976 f88 Debug/LOOK_YIELD.elf
  132. 1716 136 904 2756 ac4 Release/LOOK_YIELD.elf
  133. -----------------------------------------------------------------
  134. NUC1xxM051Seriescfg.h (12)
  135. -----------------------------------------------------------------
  136. text data bss dec hex filename
  137. 2044 272 656 2972 b9c Debug/LOOK_DELAY.elf
  138. 1544 128 656 2328 918 Release/LOOK_DELAY.elf
  139. -----------------------------------------------------------------
  140. nuc120re3an.h 优化字节数1544-1544=0
  141. -----------------------------------------------------------------
  142. text data bss dec hex filename
  143. 2336 272 656 3264 cc0 Debug/LOOK_DELAY.elf
  144. 1544 128 656 2328 918 Release/LOOK_DELAY.elf
  145. -----------------------------------------------------------------
  146. NUC1xxM051Seriescfg.h (13)
  147. -----------------------------------------------------------------
  148. text data bss dec hex filename
  149. 3004 296 696 3996 f9c Debug/LOOK_TIMER.elf
  150. 1936 152 688 2776 ad8 Release/LOOK_TIMER.elf
  151. -----------------------------------------------------------------
  152. nuc120re3an.h 优化字节数1936-1920=16
  153. -----------------------------------------------------------------
  154. text data bss dec hex filename
  155. 3692 296 696 4684 124c Debug/LOOK_TIMER.elf
  156. 1920 152 688 2760 ac8 Release/LOOK_TIMER.elf
  157. -----------------------------------------------------------------
  158. NUC1xxM051Seriescfg.h (14)
  159. -----------------------------------------------------------------
  160. text data bss dec hex filename
  161. 4740 480 736 5956 1744 Debug/ds18b20.elf
  162. 2824 280 744 3848 f08 Release/ds18b20.elf
  163. -----------------------------------------------------------------
  164. nuc120re3an.h 优化字节数2824-2844=-20
  165. -----------------------------------------------------------------
  166. text data bss dec hex filename
  167. 8556 480 736 9772 262c Debug/ds18b20.elf
  168. 2844 280 744 3868 f1c Release/ds18b20.elf
  169. -----------------------------------------------------------------
  170. NUC1xxM051Seriescfg.h (15)
  171. -----------------------------------------------------------------
  172. text data bss dec hex filename
  173. 8048 1368 1760 11176 2ba8 Debug/M0_LOOK_HOT.elf
  174. 4628 728 1760 7116 1bcc Release/M0_LOOK_HOT.elf
  175. -----------------------------------------------------------------
  176. nuc120re3an.h 优化字节数4628-4536=92
  177. -----------------------------------------------------------------
  178. text data bss dec hex filename
  179. 15320 1368 1760 18448 4810 Debug/M0_LOOK_HOT.elf
  180. 4536 728 1760 7024 1b70 Release/M0_LOOK_HOT.elf
  181. -----------------------------------------------------------------
  182. NUC1xxM051Seriescfg.h (16)
  183. -----------------------------------------------------------------
  184. text data bss dec hex filename
  185. 6088 776 1208 8072 1f88 Debug/LOOK_SPI_PDMA.elf
  186. 4024 416 1208 5648 1610 Release/LOOK_SPI_PDMA.elf
  187. -----------------------------------------------------------------
  188. nuc120re3an.h 优化字节数4024-3960=64
  189. -----------------------------------------------------------------
  190. text data bss dec hex filename
  191. 17924 776 1208 19908 4dc4 Debug/LOOK_SPI_PDMA.elf
  192. 3960 416 1208 5584 15d0 Release/LOOK_SPI_PDMA.elf
 楼主| hotpower 发表于 2011-7-6 21:01 | 显示全部楼层
两种头文件写法比较:

1.红杏

  1.         SYSs.IPRSTC2.Bits.UART1_RST = 1;
  2.         SYSs.IPRSTC2.Bits.UART1_RST = 0;
  3.         UART1s.FCR.Regs |= (1 << UART_FCR_TFR) | (1 << UART_FCR_RFR);

  4.         UART1s.LCR.Regs = 3 << UART_LCR_WLS;                                        // 设置线控
  5.         UART1s.IER.Regs = 1 << UART_IER_RDA_IEN;                                // 允许接收中断
  6.         UART1s.BAUD.Regs = (0x4e0 << UART_BAUD_BRD)
  7.                                                 | (1 << UART_BAUD_DIV_X_ONE)
  8.                                                 | (1 << UART_BAUD_DIV_X_EN);                // 波特率 = 9600

  9.         UART1s.DATA.Regs = 0xf0;                                                                // 发出“复位”信号
2.Lee老师暴力的头文件

  1.         SYS.IPRSTC2()
  2.            .UART1_RST(1);
  3.         SYS.IPRSTC2()
  4.            .UART1_RST(0);
  5.         UART1.FCR()
  6.              .TFR(1)
  7.                  .RFR(1);

  8.         UART1.LCR(0)
  9.              .WLS(3);                                        // 设置线控
  10.         UART1.IER(0)
  11.              .RDA_IEN(1);                                // 允许接收中断
  12.         UART1.BAUD(0)
  13.              .BRD(0x4e0)
  14.                  .DIV_X_ONE(1)
  15.                  .DIV_X_EN(1);                // 波特率 = 9600

  16.         UART1.DATA = 0xf0;                                                                // 发出“复位”信号
 楼主| hotpower 发表于 2011-7-6 21:08 | 显示全部楼层
本帖最后由 hotpower 于 2011-7-6 21:09 编辑

红杏转暴力规则1:
例如:
  1. UART1s.FCR.Regs |= (1 << UART_FCR_TFR) | (1 << UART_FCR_RFR);
1.去掉模块结构的s
  1. UART1.FCR.Regs |= (1 << UART_FCR_TFR) | (1 << UART_FCR_RFR);
2.寄存器加()
  1. UART1.FCR().Regs |= (1 << UART_FCR_TFR) | (1 << UART_FCR_RFR);
3.去掉Regs|=
  1. UART1.FCR(). (1 << UART_FCR_TFR) | (1 << UART_FCR_RFR);
4.设置UART_FCR_TFR
  1. UART1.FCR(). FCR_TFR(1) | (1 << UART_FCR_RFR);
5.设置UART_FCR_RFR
  1. UART1.FCR(). TFR(1). RFR(1);
 楼主| hotpower 发表于 2011-7-6 21:17 | 显示全部楼层
红杏转暴力规则2:
例如:(注意三个位都属于寄存器CON)

  1.         I2C1s.CON.Bits.EI = 1;                                //I2C1 使能中断
  2.         I2C1s.CON.Bits.STA = 0;                                //I2C1起始标志清零
  3.         I2C1s.CON.Bits.STO = 0;                                //I2C1结束标志清零

  4. 1.去掉模块结构的s
  5. [code]
  6.         I2C1.CON.Bits.EI = 1;                                //I2C1 使能中断
2.将".Bits"改为"()"

  1.         I2C1.CON().EI = 1;                                //I2C1 使能中断
3.设置EI

  1.         I2C1.CON().EI(1)                                //I2C1 使能中断
4.清除STA

  1.         I2C1.CON().EI(1)                                //I2C1 使能中断
  2.                                   .STA(0)                                //I2C1起始标志清零
5.清除STO

  1.         I2C1.CON().EI(1)                                //I2C1 使能中断
  2.                       .STA(0)                                //I2C1起始标志清零
  3.                          .STO(0);                                //I2C1结束标志清零
 楼主| hotpower 发表于 2011-7-6 21:51 | 显示全部楼层
一些转换例程摘录:
  1. #if LOOK_H == 0
  2.                                 PDMA0s.CSR.Bits.PDMACEN = 1;        //使能PDMA通道0
  3.                                 PDMA0s.CSR.Bits.TRIG_EN = 1;        //使能PDMA通道0
  4. #else
  5.                                 PDMA0.CSR()
  6.                                      .PDMACEN(1)        //使能PDMA通道0
  7.                                      .TRIG_EN(1);        //使能PDMA通道0
  8. #endif
  1. #if LOOK_H == 0
  2.                                 PDMA0s.CSR.Bits.PDMACEN = 1;        //使能PDMA通道0
  3.                                 PDMA0s.CSR.Bits.TRIG_EN = 1;        //使能PDMA通道0
  4. #else
  5.                                 PDMA0.CSR()
  6.                                      .PDMACEN(1)        //使能PDMA通道0
  7.                                      .TRIG_EN(1);        //使能PDMA通道0
  8. #endif
  1. #if LOOK_H == 0
  2.         //SYSCLKs.APBCLK.Bits.SPI1_EN = 1;                 //使用LOOK进行初始化配置
  3.         SYSs.IPRSTC2.Bits.SPI1_RST = 1;                        //SPI1模块复位
  4.         SYSs.IPRSTC2.Bits.SPI1_RST = 0;                        //SPI1模块正常工作

  5.         SPI1s.CNTRL.Bits.TX_BIT_LEN = 0;                //该寄存器用于标示一次传输中,完成的传输长度 32bits
  6.         SPI1s.CNTRL.Bits.SLAVE = 0;                                //MCU作为主机模式
  7.         SPI1s.SSR.Bits.SSR = 0;                        //当ASS位被清除,对该寄存器任何一位写1,将会激活SPI_SS [1:0]线,写0线上为非活动状态。
  8.         SPI1s.SSR.Bits.AUTOSS = 0;                //该位清位,从机是否发出信号,由设置或清除SSR[1:0]寄存器决定
  9.         //禁止自动片选功能
  10.         SPI1s.CNTRL.Bits.CLKP = 0;                // SCLK 低电平闲置
  11.         SPI1s.CNTRL.Bits.TX_NEG = 1;        //SDO 信号在SPICLK的下降沿发送
  12.         SPI1s.CNTRL.Bits.RX_NEG = 0;        //SDI 信号在SPICLK上升沿接收   
  13.         //配置SPI1为主模式 TYPE1波形 32位传输

  14.         SPI1s.CNTRL.Bits.LSB = 0;                //配置传输比特的顺序:优先发送/接收MSB                       
  15.        
  16.         SPI1s.DIVIDER.Bits.DIVIDER2 = 0xFFFF;
  17.         SPI1s.DIVIDER.Bits.DIVIDER = ((12000000/2/1000000 + 1) >>1) - 1;
  18.         //设置SPI的时钟频率为1MHz

  19.         GPIOAs.PMD.Bits.PMD14 = GPIO_PMD_OUTPUT;                          //SPI_FLAH_CS配置为输出
  20.         DISABLE_SPI_CS;

  21.         // Enable PDMA Clock       
  22.         SYSs.REGLOCK.Regs = 0x59;
  23.         SYSs.REGLOCK.Regs = 0x16;
  24.         SYSs.REGLOCK.Regs = 0x88;
  25.         SYSCLKs.AHBCLK.Bits.PDMA_EN = 1;
  26.         SYSs.REGLOCK.Regs = 0x00;

  27.         /* -------------------------------------------- */
  28.     /* Configure PDMA Channel 0 to receive SPI1 Rx0 */
  29.         /* -------------------------------------------- */
  30. ///        PDMA_GCR->PDSSR0.SPI1_RXSEL        =        0;
  31.         PDMA_GCRs.PDSSR0.Bits.SPI1_RXSEL        =        0;
  32.         //APB设备选择 PDMA 通道   SPI选择PDMA通道0 读操作

  33.         //PDMA 通道0时钟使能   
  34. ///        PDMA_GCR->GCRCSR.CLK0_EN = 1 ;
  35.         PDMA_GCRs.GCRCSR.Bits.CLK0_EN = 1 ;
  36.         PDMA0s.CSR.Bits.PDMACEN = 1;                        //PDMA通道使能
  37. ///        PDMA0s.SAR.Regs = SPI1_BASE + 0x10;                //PDMA 发送源地址寄存器  SPI1 Rx0
  38.         PDMA0s.SAR.Regs = (uint32_t)&SPI1s.RX0.Regs;                //PDMA 发送源地址寄存器  SPI1 Rx0
  39.         PDMA0s.DAR.Regs = (uint32_t)DestArray;        //PDMA 传输目的地址寄存器
  40.         PDMA0s.CSR.Bits.SAD_SEL = 0b10;                        //传输源地址固定(适用于单数据 传递到多目的地址)
  41.         PDMA0s.CSR.Bits.DAD_SEL = 0b00;                        //传输目的地址 持续增加
  42.         PDMA0s.CSR.Bits.APB_TWS = 0b01;                        // 一字节(8 bits)为单位传输 用于 PDMA 运作
  43.         PDMA0s.CSR.Bits.MODE_SEL= 0b01;                        //01 = IP到存储器模式 (APB-to-Memory).
  44.         PDMA0s.BCR.Regs = 256;                                        //PDMA 传输计数寄存器
  45.         //配置PDMA通道0
  46.        
  47.        
  48.     PDMA0s.IER.Bits.BLKD_IE = 1;
  49.         //使能PDMA通道0中断  中断源为:eDRVPDMA_BLKD(PDMA Transfer Done 中断使能)

  50.     /* -------------------------------------------- */
  51.     /* Configure PDMA Channel 1 to receive SPI1 Tx0 */
  52.         /* -------------------------------------------- */
  53.        
  54.         PDMA_GCRs.PDSSR0.Bits.SPI1_TXSEL        = 1;
  55.         //APB设备选择PDMA通道   SPI选择PDMA通道1 写操作
  56.         PDMA_GCRs.GCRCSR.Bits.CLK1_EN = 1 ;
  57.         PDMA1s.SAR.Regs = (uint32_t)SrcArray;        //PDMA 发送源地址寄存器
  58.         PDMA1s.DAR.Regs = (uint32_t)&SPI1s.TX0.Regs;                //PDMA 传输目的地址寄存器 TX0
  59.         PDMA1s.CSR.Bits.SAD_SEL = 0b00;                        //传输源地址 持续增加
  60.         PDMA1s.CSR.Bits.DAD_SEL = 0b10;                        //传输目的地址不变
  61.         PDMA1s.CSR.Bits.APB_TWS = 0b01;                        // 一字节(8 bits)为单位传输 用于 PDMA 运作
  62.         PDMA1s.CSR.Bits.MODE_SEL= 0b10;                        //存储器到 IP 模式 (Memory-to-APB)
  63.         PDMA1s.BCR.Regs = 256;                                        //PDMA 传输计数寄存器
  64.         //配置PDMA通道1
  65.        
  66.     PDMA1s.IER.Bits.BLKD_IE = 1;
  67. #else
  68.         //SYSCLKs.APBCLK.Bits.SPI1_EN = 1;                 //使用LOOK进行初始化配置
  69.         SYS.IPRSTC2().SPI1_RST = 1;                        //SPI1模块复位
  70.         SYS.IPRSTC2().SPI1_RST = 0;                        //SPI1模块正常工作

  71.         SPI1.CNTRL()
  72.             .TX_BIT_LEN(0)                //该寄存器用于标示一次传输中,完成的传输长度 32bits
  73.             .SLAVE(0);                                //MCU作为主机模式
  74.         SPI1.SSR()
  75.             .SSR(0)                        //当ASS位被清除,对该寄存器任何一位写1,将会激活SPI_SS [1:0]线,写0线上为非活动状态。
  76.             .AUTOSS(0);                //该位清位,从机是否发出信号,由设置或清除SSR[1:0]寄存器决定
  77.         //禁止自动片选功能
  78.         SPI1.CNTRL()
  79.             .CLKP(0)                // SCLK 低电平闲置
  80.             .TX_NEG(1)        //SDO 信号在SPICLK的下降沿发送
  81.             .RX_NEG(0)        //SDI 信号在SPICLK上升沿接收   
  82.         //配置SPI1为主模式 TYPE1波形 32位传输

  83.             .LSB(0);                //配置传输比特的顺序:优先发送/接收MSB                       
  84.        
  85.         SPI1.DIVIDER()
  86.             .DIVIDER2(0xFFFF)
  87.             .DIVIDER(((12000000/2/1000000 + 1) >>1) - 1);
  88.         //设置SPI的时钟频率为1MHz

  89.         GPIOA.PMD().PMD14 = gpio_t::OUTPUT;                          //SPI_FLAH_CS配置为输出
  90.         DISABLE_SPI_CS;

  91.         // Enable PDMA Clock       
  92.         SYS.REGLOCK = 0x59;
  93.         SYS.REGLOCK = 0x16;
  94.         SYS.REGLOCK = 0x88;
  95. /*
  96.         SYS.REGWRPROT = 0x59;
  97.         SYS.REGWRPROT = 0x16;
  98.         SYS.REGWRPROT = 0x88;
  99. */
  100.         SYSCLK.AHBCLK().PDMA_EN = 1;
  101. ///        SYS.REGLOCK = 0x00;
  102.         SYS.REGWRPROT = 0x00;

  103.         /* -------------------------------------------- */
  104.     /* Configure PDMA Channel 0 to receive SPI1 Rx0 */
  105.         /* -------------------------------------------- */
  106.         PDMA_GCR.PDSSR0().SPI1_RXSEL        =        0;
  107.         //APB设备选择 PDMA 通道   SPI选择PDMA通道0 读操作

  108.         //PDMA 通道0时钟使能   
  109.         PDMA_GCR.GCRCSR().CLK0_EN = 1 ;
  110.         PDMA0.CSR().PDMACEN = 1;                        //PDMA通道使能
  111.         PDMA0.SAR = (uint32_t)&SPI1.RX0;                //PDMA 发送源地址寄存器  SPI1 Rx0
  112.         PDMA0.DAR = (uint32_t)DestArray;        //PDMA 传输目的地址寄存器
  113.         PDMA0.CSR()
  114.              .SAD_SEL(0b10)                        //传输源地址固定(适用于单数据 传递到多目的地址)
  115.              .DAD_SEL(0b00)                        //传输目的地址 持续增加
  116.              .APB_TWS(0b01)                        // 一字节(8 bits)为单位传输 用于 PDMA 运作
  117.              .MODE_SEL(0b01);                        //01 = IP到存储器模式 (APB-to-Memory).
  118.         PDMA0.BCR = 256;                                        //PDMA 传输计数寄存器
  119.         //配置PDMA通道0
  120.        
  121.        
  122.     PDMA0.IER().BLKD_IE = 1;
  123.         //使能PDMA通道0中断  中断源为:eDRVPDMA_BLKD(PDMA Transfer Done 中断使能)

  124.     /* -------------------------------------------- */
  125.     /* Configure PDMA Channel 1 to receive SPI1 Tx0 */
  126.         /* -------------------------------------------- */
  127.        
  128. ///        PDMA_GCR->PDSSR0.SPI1_TXSEL        = 1;
  129.         PDMA_GCR.PDSSR0().SPI1_TXSEL        = 1;
  130.         //APB设备选择PDMA通道   SPI选择PDMA通道1 写操作
  131. ///        PDMA_GCR->GCRCSR.CLK1_EN = 1 ;
  132.         PDMA_GCR.GCRCSR().CLK1_EN = 1 ;
  133.         PDMA1.SAR = (uint32_t)SrcArray;        //PDMA 发送源地址寄存器
  134. ///        PDMA1s.DAR.Regs = SPI1_BASE + 0x20;                //PDMA 传输目的地址寄存器
  135.         PDMA1.DAR = (uint32_t)&SPI1.TX0;                //PDMA 传输目的地址寄存器 TX0
  136.         PDMA1.CSR().SAD_SEL = 0b00;                        //传输源地址 持续增加
  137.         PDMA1.CSR().DAD_SEL = 0b10;                        //传输目的地址不变
  138.         PDMA1.CSR().APB_TWS = 0b01;                        // 一字节(8 bits)为单位传输 用于 PDMA 运作
  139.         PDMA1.CSR().MODE_SEL= 0b10;                        //存储器到 IP 模式 (Memory-to-APB)
  140.         PDMA1.BCR = 256;                                        //PDMA 传输计数寄存器
  141.         //配置PDMA通道1
  142.        
  143.     PDMA1.IER().BLKD_IE = 1;

  144. #endif
 楼主| hotpower 发表于 2011-7-6 21:52 | 显示全部楼层
  1. #if LOOK_H == 0
  2.         if (PDMA0s.ISR.Bits.BLKD_IF)
  3.         {
  4.                 PDMA0s.ISR.Bits.BLKD_IF = 1;
  5.                 sem_pdma0.do_post();                        //释放一个信号量资源
  6.         }
  7.         if (PDMA1s.ISR.Bits.BLKD_IF)
  8.         {
  9.                 PDMA1s.ISR.Bits.BLKD_IF = 1;
  10.                 sem_pdma1.do_post();                        //释放一个信号量资源
  11.         }
  12. #else
  13.         if (PDMA0.ISR().BLKD_IF)
  14.         {
  15.                 PDMA0.ISR().BLKD_IF = 1;
  16.                 sem_pdma0.do_post();                        //释放一个信号量资源
  17.         }
  18.         if (PDMA1.ISR().BLKD_IF)
  19.         {
  20.                 PDMA1.ISR().BLKD_IF = 1;
  21.                 sem_pdma1.do_post();                        //释放一个信号量资源
  22.         }
  23. #endif
  1. #if LOOK_H == 0
  2.         while (SPI1s.CNTRL.Bits.GO_BUSY);

  3.         SPI1s.TX0.Regs = *pu32Data;
  4.         SPI1s.CNTRL.Bits.GO_BUSY = 1;
  5. #else
  6.         while (SPI1.CNTRL().GO_BUSY);

  7.         SPI1.TX0 = *pu32Data;
  8.         SPI1.CNTRL().GO_BUSY = 1;

  9. #endif
 楼主| hotpower 发表于 2011-7-6 21:52 | 显示全部楼层
  1. #if LOOK_H == 0
  2.     SYSs.IPRSTC2.Bits.UART0_RST = 1;                //UART0 模块复位
  3.     SYSs.IPRSTC2.Bits.UART0_RST = 0;                //UART0 模块正常工作
  4.     UART0s.FCR.Bits.TFR = 1;                                //TX 软件复位
  5.     UART0s.FCR.Bits.RFR = 1;                                //RX 软件复位
  6.     UART0s.FCR.Bits.RFITL = 0x00;                        //Rx FIFO中断 (INT_RDA) 触发级别   1位
  7.    
  8.         UART0s.LCR.Bits.SPE = 0;                                //无校验  奇偶使能位
  9.         UART0s.LCR.Bits.EPE = 0;                //  0----奇校验 1----偶校验
  10.         UART0s.LCR.Bits.PBE = 0;                               
  11.     UART0s.LCR.Bits.WLS = 0b011;                        //字长度选择 8bits
  12.     UART0s.LCR.Bits.NSB = 0;                                //1位停止位
  13.    
  14.         UART0s.BAUD.Bits.BRD = 0x66;                        //外部12MHz 115200bps  对波特率分频寄存器的设置波特率分频设置即该句必须放在第一位
  15.         UART0s.BAUD.Bits.DIV_X_EN = 1;                        //使能分频X
  16.         UART0s.BAUD.Bits.DIV_X_ONE = 1;                        //Divider X equal 1

  17.         UART0s.IER.Bits.RDA_IEN = 1;                        //使能接收中断
  18. #else
  19.     SYS.IPRSTC2().UART0_RST = 1;                //UART0 模块复位
  20.     SYS.IPRSTC2().UART0_RST = 0;                //UART0 模块正常工作
  21.     UART0.FCR()
  22.              .TFR(1)                                //TX 软件复位
  23.          .RFR(1)                                //RX 软件复位
  24.          .RFITL(0x00);                        //Rx FIFO中断 (INT_RDA) 触发级别   1位
  25.    
  26.         UART0.LCR()
  27.              .SPE(0)                                //无校验  奇偶使能位
  28.              .EPE(0)                //  0----奇校验 1----偶校验
  29.              .PBE(0)                               
  30.          .WLS(0b011)                        //字长度选择 8bits
  31.          .NSB(0);                                //1位停止位
  32.    
  33.         UART0.BAUD()
  34.              .BRD(0x66)                        //外部12MHz 115200bps  对波特率分频寄存器的设置波特率分频设置即该句必须放在第一位
  35.              .DIV_X_EN(1)                        //使能分频X
  36.              .DIV_X_ONE(1);                        //Divider X equal 1

  37.         UART0.IER().RDA_IEN = 1;                        //使能接收中断
  38. #endif
Swallow_0322 发表于 2011-7-7 07:46 | 显示全部楼层
o(∩_∩)o 哈哈 够暴力!:victory:
 楼主| hotpower 发表于 2011-7-7 10:34 | 显示全部楼层
老师的头文件在cortex包里include目录下的nuvoton.h,实现方法在sfr.h。
murex 发表于 2011-7-7 22:42 | 显示全部楼层
实在是太暴力了
 楼主| hotpower 发表于 2011-7-7 23:17 | 显示全部楼层
在一条命令里连续进行位操作,确实很暴力
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

1460

主题

21617

帖子

508

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