Common.c 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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 : [email protected]
  10. // Date : Apr/21/2016
  11. //***********************************************************************************************************
  12. #include "N76E003.h"
  13. #include "Common.h"
  14. #include "Delay.h"
  15. #include "SFR_Macro.h"
  16. #include "Function_define.h"
  17. //----------------------------------------------------------------------------------
  18. // UART0 baud rate initial setting
  19. //----------------------------------------------------------------------------------
  20. void InitialUART0_Timer1(UINT32 u32Baudrate) //T1M = 1, SMOD = 1
  21. {
  22. P06_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
  23. P07_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
  24. SCON = 0x50; //UART0 Mode1,REN=1,TI=1
  25. TMOD |= 0x20; //Timer1 Mode1
  26. set_SMOD; //UART0 Double Rate Enable
  27. set_T1M;
  28. clr_BRCK; //Serial port 0 baud rate clock source = Timer1
  29. #ifdef FOSC_160000
  30. TH1 = 256 - (1000000/u32Baudrate+1); /*16 MHz */
  31. #endif
  32. #ifdef FOSC_166000
  33. TH1 = 256 - (1037500/u32Baudrate); /*16.6 MHz */
  34. #endif
  35. set_TR1;
  36. set_TI; //For printf function must setting TI = 1
  37. }
  38. //---------------------------------------------------------------
  39. void InitialUART0_Timer3(UINT32 u32Baudrate) //use timer3 as Baudrate generator
  40. {
  41. P06_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
  42. P07_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
  43. SCON = 0x50; //UART0 Mode1,REN=1,TI=1
  44. set_SMOD; //UART0 Double Rate Enable
  45. T3CON &= 0xF8; //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1)
  46. set_BRCK; //UART0 baud rate clock source = Timer3
  47. #ifdef FOSC_160000
  48. RH3 = HIBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
  49. RL3 = LOBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
  50. #endif
  51. #ifdef FOSC_166000
  52. RH3 = HIBYTE(65536 - (1037500/u32Baudrate)); /*16.6 MHz */
  53. RL3 = LOBYTE(65536 - (1037500/u32Baudrate)); /*16.6 MHz */
  54. #endif
  55. set_TR3; //Trigger Timer3
  56. set_TI; //For printf function must setting TI = 1
  57. }
  58. UINT8 Receive_Data_From_UART0(void)
  59. {
  60. UINT8 c;
  61. while (!RI);
  62. c = SBUF;
  63. RI = 0;
  64. return (c);
  65. }
  66. void Send_Data_To_UART0 (UINT8 c)
  67. {
  68. TI = 0;
  69. SBUF = c;
  70. while(TI==0);
  71. }
  72. //----------------------------------------------------------------------------------
  73. // UART1 baud rate initial setting
  74. //----------------------------------------------------------------------------------
  75. void InitialUART1_Timer3(UINT32 u32Baudrate) //use timer3 as Baudrate generator
  76. {
  77. P02_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
  78. P16_Quasi_Mode; //Setting UART pin as Quasi mode for transmit
  79. SCON_1 = 0x50; //UART1 Mode1,REN_1=1,TI_1=1
  80. T3CON = 0x08; //T3PS2=0,T3PS1=0,T3PS0=0(Prescale=1), UART1 in MODE 1
  81. clr_BRCK;
  82. #ifdef FOSC_160000
  83. RH3 = HIBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
  84. RL3 = LOBYTE(65536 - (1000000/u32Baudrate)-1); /*16 MHz */
  85. #endif
  86. #ifdef FOSC_166000
  87. RH3 = HIBYTE(65536 - (1037500/u32Baudrate)); /*16.6 MHz */
  88. RL3 = LOBYTE(65536 - (1037500/u32Baudrate)); /*16.6 MHz */
  89. #endif
  90. set_TR3; //Trigger Timer3
  91. }
  92. UINT8 Receive_Data_From_UART1(void)
  93. {
  94. UINT8 c;
  95. while (!RI_1);
  96. c = SBUF_1;
  97. RI_1 = 0;
  98. return (c);
  99. }
  100. void Send_Data_To_UART1 (UINT8 c)
  101. {
  102. TI_1 = 0;
  103. SBUF_1 = c;
  104. while(TI_1==0);
  105. }
  106. /*==========================================================================*/
  107. #ifdef SW_Reset
  108. void SW_Reset(void)
  109. {
  110. TA = 0xAA;
  111. TA = 0x55;
  112. set_SWRST;
  113. }
  114. #endif
  115. /*==========================================================================*/