查看: 216|回复: 2
收起左侧

[DemoCode下载] N76E003的PWM中断演示

[复制链接]

53

主题

1241

帖子

3712

积分

中级工程师

 楼主| 发表于 2017-7-17 20:31 | 显示全部楼层 |返回版面|阅读模式
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Nuvoton Technoledge Corp.
  8. //  Website: http://www.nuvoton.com
  9. //  E-Mail : MicroC-8bit@nuvoton.com
  10. //  Date   : Apr/21/2016
  11. //***********************************************************************************************************

  12. //***********************************************************************************************************
  13. //  File Function: N76E003 PWM Output demo code
  14. //***********************************************************************************************************

  15. #include <stdio.h>
  16. #include "N76E003.h"
  17. #include "Common.h"
  18. #include "Delay.h"
  19. #include "SFR_Macro.h"
  20. #include "Function_Define.h"


  21. //*****************  The Following is in define in Fucntion_define.h  ***************************
  22. //****** Always include Function_define.h call the define you want, detail see main(void) *******
  23. //***********************************************************************************************
  24. #if 0
  25. //--------- PMW clock source select define ---------------------
  26. //#define                PWM_CLOCK_FSYS                                        CKCON&=0xBF
  27. //#define                PWM_CLOCK_TIMER1                                CKCON|=0x40
  28. ////--------- PWM clock devide define ----------------------------
  29. //#define                PWM_CLOCK_DIV_2                                        PWMCON1|=0x01;PWMCON1&=0xF9
  30. //#define                PWM_CLOCK_DIV_4                                        PWMCON1|=0x02;PWMCON1&=0xFA
  31. //#define                PWM_CLOCK_DIV_8                                        PWMCON1|=0x03;PWMCON1&=0xFB
  32. //#define                PWM_CLOCK_DIV_16                                PWMCON1|=0x04;PWMCON1&=0xFC
  33. //#define                PWM_CLOCK_DIV_32                                PWMCON1|=0x05;PWMCON1&=0xFD
  34. //#define                PWM_CLOCK_DIV_64                                PWMCON1|=0x06;PWMCON1&=0xFE
  35. //#define                PWM_CLOCK_DIV_128                                PWMCON1|=0x07
  36. ////--------- PWM I/O select define ------------------------------
  37. //#define                PWM5_P15_OUTPUT_ENABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1|=0x20;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P1.5 as PWM5 output enable
  38. //#define                PWM5_P03_OUTPUT_ENABLE                PIOCON0|=0x20                                                                                                                                                                                                                //P0.3 as PWM5
  39. //#define                PWM4_P01_OUTPUT_ENABLE                PIOCON0|=0x10                                                                                                                                                                                                                //P0.1 as PWM4 output enable
  40. //#define                PWM3_P04_OUTPUT_ENABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1|=0x08;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P0.4 as PWM3 output enable
  41. //#define                PWM3_P00_OUTPUT_ENABLE                PIOCON0|=0x08                                                                                                                                                                                                                //P0.0 as PWM3
  42. //#define                PWM2_P05_OUTPUT_ENABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1|=0x04;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P1.0 as PWM2 output enable
  43. //#define                PWM2_P10_OUTPUT_ENABLE                PIOCON0|=0x04                                                                                                                                                                                                                //P1.0 as PWM2
  44. //#define                PWM1_P14_OUTPUT_ENABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1|=0x02;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P1.4 as PWM1 output enable
  45. //#define                PWM1_P11_OUTPUT_ENABLE                PIOCON0|=0x02                                                                                                                                                                                                                //P1.1 as PWM1
  46. //#define                PWM0_P12_OUTPUT_ENABLE                PIOCON0|=0x01                                                                                                                                                                                                                //P1.2 as PWM0 output enable
  47. //#define         ALL_PWM_OUTPUT_ENABLE                        PIOCON0=0xFF;PIOCON1=0xFF
  48. //#define                PWM5_P15_OUTPUT_DISABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1&=0xDF;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P1.5 as PWM5 output disable
  49. //#define                PWM5_P03_OUTPUT_DISABLE                PIOCON0&=0xDF                                                                                                                                                                                                                //P0.3 as PWM5
  50. //#define                PWM4_P01_OUTPUT_DISABLE                PIOCON0&=0xEF                                                                                                                                                                                                                //P0.1 as PWM4 output disable
  51. //#define                PWM3_P04_OUTPUT_DISABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1&=0xF7;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P0.4 as PWM3 output disable
  52. //#define                PWM3_P00_OUTPUT_DISABLE                PIOCON0&=0xF7                                                                                                                                                                                                                //P0.0 as PWM3
  53. //#define                PWM2_P05_OUTPUT_DISABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1&=0xFB;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P1.0 as PWM2 output disable
  54. //#define                PWM2_P10_OUTPUT_DISABLE                PIOCON0&=0xFB                                                                                                                                                                                                                //P1.0 as PWM2
  55. //#define                PWM1_P14_OUTPUT_DISABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1&=0xFD;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P1.4 as PWM1 output disable
  56. //#define                PWM1_P11_OUTPUT_DISABLE                PIOCON0&=0xFD                                                                                                                                                                                                                //P1.1 as PWM1
  57. //#define                PWM0_P12_OUTPUT_DISABLE                PIOCON0&=0xFE                                                                                                                                                                                                                //P1.2 as PWM0 output disable
  58. //#define         ALL_PWM_OUTPUT_DISABLE                PIOCON0=0x00;PIOCON1=0x00
  59. ////--------- PWM I/O Polarity Control ---------------------------
  60. //#define                PWM5_OUTPUT_INVERSE                        PNP|=0x20                               
  61. //#define                PWM4_OUTPUT_INVERSE                        PNP|=0x10                               
  62. //#define                PWM3_OUTPUT_INVERSE                        PNP|=0x08                               
  63. //#define                PWM2_OUTPUT_INVERSE                        PNP|=0x04                               
  64. //#define                PWM1_OUTPUT_INVERSE                        PNP|=0x02                               
  65. //#define                PWM0_OUTPUT_INVERSE                        PNP|=0x01                               
  66. //#define                PWM_OUTPUT_ALL_INVERSE        PNP=0xFF
  67. //#define                PWM5_OUTPUT_NORMAL                        PNP&=0xDF                               
  68. //#define                PWM4_OUTPUT_NORMAL                        PNP&=0xEF                               
  69. //#define                PWM3_OUTPUT_NORMAL                        PNP&=0xF7                               
  70. //#define                PWM2_OUTPUT_NORMAL                        PNP&=0xFB                               
  71. //#define                PWM1_OUTPUT_NORMAL                        PNP&=0xFD                               
  72. //#define                PWM0_OUTPUT_NORMAL                        PNP&=0xFE                               
  73. //#define                PWM_OUTPUT_ALL_NORMAL                PNP=0x00
  74. ////--------- PWM type define ------------------------------------
  75. //#define                PWM_EDGE_TYPE                                                PWMCON1&=~SET_BIT4
  76. //#define                PWM_CENTER_TYPE                                        PWMCON1|=SET_BIT4
  77. ////--------- PWM mode define ------------------------------------
  78. //#define                PWM_IMDEPENDENT_MODE                PWMCON1&=0x3F
  79. //#define                PWM_COMPLEMENTARY_MODE        PWMCON1|=0x40;PWMCON1&=0x7F
  80. //#define                PWM_SYNCHRONIZED_MODE                PWMCON1|=0x80;PWMCON1&=0xBF
  81. //#define         PWM_GP_MODE_ENABLE                        PWMCON1|=0x20
  82. //#define                PWM_GP_MODE_DISABLE                        PWMCON1&=0xDF
  83. ////--------- PMW interrupt setting ------------------------------
  84. //#define                PWM_FALLING_INT                                        PWMCON0&=0xF3
  85. //#define                PWM_RISING_INT                                        PWMCON0|=0x04;PWMCON0&=0xF7
  86. //#define                PWM_CENTRAL_POINT_INT                PWMCON0|=0x08;PWMCON0&=0xFB
  87. //#define                PWM_PERIOD_END_INT                        PWMCON0|=0x0C
  88. ////--------- PWM interrupt pin select ---------------------------
  89. //#define                PWM_INT_PWM0                                                PWMCON0&=0xFC
  90. //#define                PWM_INT_PWM2                                                PWMCON0|=0x01;PWMCON0&=0xFD
  91. //#define                PWM_INT_PWM4                                                PWMCON0|=0x02;PWMCON0&=0xFE
  92. //#define                PWM_INT_PMW6                                                PWMCON0|=0x03
  93. ////--------- PWM Dead time setting ------------------------------
  94. //#define         PWM45_DEADTIME_ENABLE                        BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;PDTEN|=0x04;EA=BIT_TMP
  95. //#define         PWM34_DEADTIME_ENABLE                        BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;PDTEN|=0x02;EA=BIT_TMP
  96. //#define         PWM01_DEADTIME_ENABLE                        BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;PDTEN|=0x01;EA=BIT_TMP
  97. #endif


  98. /************************************************************************************************************
  99. *   PWM interrupt subroutine
  100. ************************************************************************************************************/
  101. void PWM_ISR (void) interrupt 13
  102. {
  103.     clr_PWMF;               // clear PWM interrupt flag
  104.     P12 = ~P12;                                                        // GPIO1 show PWM INT
  105. }

  106. /************************************************************************************************************
  107. *    Main function
  108. ************************************************************************************************************/
  109. void main(void)
  110. {
  111.     Set_All_GPIO_Quasi_Mode;
  112. /**********************************************************************
  113.         PWM frequency = Fpwm/((PWMPH,PWMPL) + 1) <Fpwm = Fsys/PWM_CLOCK_DIV>
  114.                                                                 = (22.1184MHz/8)/(0x3FF + 1)
  115.                                                                 = 2.7KHz
  116. ***********************************************************************/
  117.                 PWM2_P10_OUTPUT_ENABLE;
  118.                 PWM_INT_PWM2;       
  119.                 PWM_FALLING_INT;                                        //Setting Interrupt happen when PWM0 falling signal
  120.        
  121.                 PWM_CLOCK_DIV_8;
  122.                 PWMPH = 0x03;                                                        //Setting PWM period
  123.                 PWMPL = 0xFF;
  124.                 PWM0H = 0x01;                                                        //PWM0 high duty = 1/2 PWM period
  125.                 PWM0L = 0xFF;       

  126.                 set_EPWM;                                                                        //Enable PWM interrupt
  127.                 set_EA;                                                                       
  128.     set_LOAD;
  129.     set_PWMRUN;
  130.                 while(1);
  131. }
复制代码


53

主题

1241

帖子

3712

积分

中级工程师

 楼主| 发表于 2017-7-17 20:31 | 显示全部楼层 |返回版面
其实官方提供了大部分的外设例子。

33

主题

891

帖子

2668

积分

初级工程师

发表于 2017-7-17 21:36 | 显示全部楼层 |返回版面
入门学这个很好
您需要登录后才可以回帖 登录 | 注册 手机登录

本版积分规则

分享 快速回复 返回顶部 返回列表