[DemoCode下载] 新唐MINI51系列开发板自带的DEMO程序

[复制链接]
 楼主| 598330983 发表于 2017-2-19 19:20 | 显示全部楼层 |阅读模式
  1. /******************************************************************************
  2. * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
  3. * [url=home.php?mod=space&uid=895143]@version[/url]  V1.00
  4. * $Revision: 9 $
  5. * $Date: 15/10/06 11:04a $
  6. * [url=home.php?mod=space&uid=247401]@brief[/url]    This sample toggles P3.6 to turn on board LED on and off
  7. *
  8. * @note
  9. * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
  10. *****************************************************************************/
  11. #include <stdio.h>
  12. #include "mini51series.h"
  13. #include "gpio.h"

  14. void SYS_Init(void)
  15. {
  16.     /* Unlock protected registers */
  17.     SYS_UnlockReg();

  18.     /*---------------------------------------------------------------------------------------------------------*/
  19.     /* Init System Clock                                                                                       */
  20.     /*---------------------------------------------------------------------------------------------------------*/

  21.     /* Set P5.0 and P5.1 -> XTAL  */
  22.     SYS->P5_MFP &= ~(SYS_MFP_P50_Msk | SYS_MFP_P51_Msk);
  23.     SYS->P5_MFP |= (SYS_MFP_P50_XTAL1 | SYS_MFP_P51_XTAL2);

  24.     /* Enable external 12MHz XTAL, internal 22.1184MHz */
  25.     CLK->PWRCON |= CLK_PWRCON_XTL12M | CLK_PWRCON_IRC22M_EN_Msk;

  26.     /* Waiting for clock ready */
  27.     CLK_WaitClockReady(CLK_CLKSTATUS_XTL_STB_Msk | CLK_CLKSTATUS_IRC22M_STB_Msk);

  28.     /* Switch HCLK clock source to XTL */
  29.     CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_XTAL,CLK_CLKDIV_HCLK(1));

  30.     /* STCLK to XTL STCLK to XTL */
  31.     CLK_SetSysTickClockSrc(CLK_CLKSEL0_STCLK_S_XTAL);

  32.     /* Enable IP clock */
  33.     CLK_EnableModuleClock(UART_MODULE);

  34.     /* Select IP clock source */
  35.     CLK_SetModuleClock(UART_MODULE,CLK_CLKSEL1_UART_S_XTAL,CLK_CLKDIV_UART(1));

  36.     /*---------------------------------------------------------------------------------------------------------*/
  37.     /* Init I/O Multi-function                                                                                 */
  38.     /*---------------------------------------------------------------------------------------------------------*/
  39.     /* Set P0 multi-function pins for UART RXD and TXD */
  40.     SYS->P0_MFP &= ~(SYS_MFP_P01_Msk | SYS_MFP_P00_Msk);
  41.     SYS->P0_MFP |= (SYS_MFP_P01_RXD | SYS_MFP_P00_TXD);

  42.     /* To update the variable SystemCoreClock */
  43.     SystemCoreClockUpdate();

  44.     /* Lock protected registers */
  45.     SYS_LockReg();
  46. }

  47. void UART_Init(void)
  48. {
  49.     /*---------------------------------------------------------------------------------------------------------*/
  50.     /* Init UART                                                                                               */
  51.     /*---------------------------------------------------------------------------------------------------------*/
  52.     /* Reset IP */
  53.     SYS_ResetModule(SYS_IPRSTC2_UART_RST_Msk);

  54.     /* Configure UART and set UART Baudrate */
  55.     UART_Open(UART, 115200);

  56. }

  57. void delay_loop(void)
  58. {
  59.     __IO uint32_t j;

  60.     for(j=0; j<60000; j++);
  61.     for(j=0; j<60000; j++);
  62.     for(j=0; j<60000; j++);
  63.     for(j=0; j<60000; j++);
  64. }



  65. int main(void)
  66. {

  67.     /* Init System, IP clock and multi-function I/O */
  68.     SYS_Init(); //In the end of SYS_Init() will issue SYS_LockReg() to lock protected register. If user want to write protected register, please issue SYS_UnlockReg() to unlock protected register.

  69.     /* Init UART for printf */
  70.     UART_Init();

  71.     printf("+---------------------------------+\n");
  72.     printf("|    Mini51 NuTiny Sample Code    |\n");
  73.     printf("+---------------------------------+\n");

  74.     /*set P3.6 to output mode */
  75.     GPIO_SetMode(P3, BIT6, GPIO_PMD_OUTPUT);        // For NuTiny-SDK-Mini51L
  76.     /*set P2.4 or P3.6 to output mode */
  77.     //GPIO_SetMode(P2, BIT4, GPIO_PMD_OUTPUT);        // For NuTiny-SDK-Mini51F

  78.     while(1) {
  79.         P36 = 0;            // For NuTiny-SDK-Mini51L
  80.         //P24 = 0;          // For NuTiny-SDK-Mini51F
  81.         delay_loop();
  82.         P36 = 1;            // For NuTiny-SDK-Mini51L
  83.         //P24 = 1;          // For NuTiny-SDK-Mini51F
  84.         delay_loop();
  85.     }
  86. }

  87. /*** (C) COPYRIGHT 2013 Nuvoton Technology Corp. ***/


 楼主| 598330983 发表于 2017-2-19 19:20 | 显示全部楼层
  1. /******************************************************************************
  2. * @file     main.c
  3. * @version  V1.00
  4. * $Revision: 9 $
  5. * $Date: 15/10/06 11:24a $
  6. * @brief    This is a starter kit sample enables all peripherals on learning
  7. *           board. Peripherals enabled are UART, SPI, I2C, Timer, ADC, and PWM
  8. *
  9. * @note
  10. * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
  11. *****************************************************************************/
  12. #include <stdio.h>
  13. #include "Mini51Series.h"
  14. #include "lcd_driver.h"
  15. #include "eeprom_24lc64.h"

  16. void Delay(int32_t ms)
  17. {
  18.     int32_t i;

  19.     for(i=0; i<ms; i++)
  20.         CLK_SysTickDelay(1000);
  21. }

  22. void EINT0_IRQHandler(void)
  23. {
  24.     P3->ISRC = 1 << 2;

  25.     /* Toggle PWM3 enable/disable */
  26.     PWM->POE |= PWM_POE_PWM3_Msk;

  27.     printf("EINT0 Interrupt!\n");

  28. }

  29. void TMR0_IRQHandler(void)
  30. {
  31.     /* Clear Interrupt */
  32.     TIMER0->TISR = 1;

  33. }

  34. void ADC_Init(void)
  35. {
  36.     /*reset ADC */
  37.     SYS->IPRSTC2 |= SYS_IPRSTC2_ADC_RST_Msk;
  38.     SYS->IPRSTC2 &= (~SYS_IPRSTC2_ADC_RST_Msk);

  39.     /* ADC clock source */
  40.     CLK->CLKSEL1 &= (~CLK_CLKSEL1_ADC_S_Msk);
  41.     CLK->CLKSEL1 |= CLK_CLKSEL1_ADC_S_XTAL;

  42.     /* Set ADC divisor */
  43.     CLK->CLKDIV &= (~CLK_CLKDIV_ADC_N_Msk);
  44.     CLK->CLKDIV |= CLK_CLKDIV_ADC(3);

  45.     /* ADC engine clock enable */
  46.     CLK->APBCLK |= CLK_APBCLK_ADC_EN_Msk;

  47.     /* ADC enable */
  48.     ADC_POWER_ON(ADC);
  49. }

  50. void PWM_Init(void)
  51. {

  52.     CLK->APBCLK |= (CLK_APBCLK_PWM01_EN_Msk | CLK_APBCLK_PWM23_EN_Msk | CLK_APBCLK_PWM45_EN_Msk) ;
  53.     SYS->IPRSTC2 |= SYS_IPRSTC2_PWM_RST_Msk;
  54.     SYS->IPRSTC2 &= (~SYS_IPRSTC2_PWM_RST_Msk);

  55.     /* PWM Timer0: Clk = HCLK / 120 / 16, Freq = clk / 6250, duty cycle = 3125/6250 % */
  56.     /* PWM Timer1: Clk = HCLK / 120 / 16, Freq = clk / 3125, duty cycle = 1563/3125 % */
  57.     /* PWM Timer2: Clk = HCLK / 60 / 16, Freq = clk / 3125, duty cycle = 1563/3125 % */
  58.     /* PWM Timer3: Clk = HCLK / 60 / 1, Freq = clk / 50, duty cycle = 25/50 % */
  59.     /* PWM0 = 12000000 / 120 / 16 / 6250 =    1Hz */
  60.     /* PWM1 = 12000000 / 120 / 16 / 3125 =    2Hz */
  61.     /* PWM2 = 12000000 /  60 / 16 / 3125 =    4Hz */
  62.     /* PWM3 = 12000000 /  60 /  1 /   50 = 4000Hz */
  63.     PWM_ConfigOutputChannel(PWM,0,1,50);
  64.     PWM_ConfigOutputChannel(PWM,1,1,50);
  65.     PWM_ConfigOutputChannel(PWM,2,1,50);
  66.     PWM_ConfigOutputChannel(PWM,3,1,50);
  67.     PWM_EnableOutput(PWM,0xF);
  68.     PWM_Start(PWM,0xF);

  69.     SYS->P2_MFP &= ~(SYS_MFP_P22_Msk | SYS_MFP_P23_Msk | SYS_MFP_P24_Msk | SYS_MFP_P25_Msk);
  70.     SYS->P2_MFP |=  (SYS_MFP_P22_PWM0| SYS_MFP_P23_PWM1| SYS_MFP_P24_PWM2| SYS_MFP_P25_PWM3) ;
  71. }

  72. void TMR0_Init(void)
  73. {
  74.     TIMER_EnableInt(TIMER0);
  75.     TIMER_SET_PRESCALE_VALUE(TIMER0,11); // 12MHz / (11+1) / 100000 = 10Hz
  76.     TIMER_Start(TIMER0);
  77.     TIMER_SET_CMP_VALUE(TIMER0,100000);
  78.     NVIC_EnableIRQ(TMR0_IRQn);
  79. }

  80. void EINT0_Init(void)
  81. {
  82.     /* Debounce function control */
  83.     GPIO->DBNCECON = GPIO_DBNCECON_ICLK_ON | GPIO_DBNCECON_DBCLKSRC_HCLK | GPIO_DBNCECON_DBCLKSEL_32768;
  84.     GPIO_ENABLE_DEBOUNCE(P3,1<<2);

  85.     /* Configure external interrupt */
  86.     GPIO_EnableInt(P3, 2, GPIO_INT_FALLING);
  87.     NVIC_EnableIRQ(EINT0_IRQn);
  88. }

  89. void I2C_Init(void)
  90. {
  91.     /* Enable I2C */
  92.     CLK->APBCLK |= CLK_APBCLK_I2C_EN_Msk ;
  93.     SYS->IPRSTC2 |= SYS_IPRSTC2_I2C_RST_Msk;
  94.     SYS->IPRSTC2 &= (~SYS_IPRSTC2_I2C_RST_Msk);
  95.     I2C->I2CON = I2C_I2CON_ENSI_Msk ;
  96. }

  97. void SYS_Init(void)
  98. {
  99.     /*---------------------------------------------------------------------------------------------------------*/
  100.     /* Init System Clock                                                                                       */
  101.     /*---------------------------------------------------------------------------------------------------------*/
  102.     /* Unlock protected registers */
  103.     SYS_UnlockReg();

  104.     /* Set P5.0 and P5.1 -> XTAL  */
  105.     SYS->P5_MFP &= ~(SYS_MFP_P50_Msk | SYS_MFP_P51_Msk);
  106.     SYS->P5_MFP |= (SYS_MFP_P50_XTAL1 | SYS_MFP_P51_XTAL2);

  107.     /* Enable external 12MHz XTAL, internal 22.1184MHz */
  108.     CLK->PWRCON = (CLK->PWRCON & ~CLK_PWRCON_XTLCLK_EN_Msk) | CLK_PWRCON_XTL12M;

  109.     CLK_SysTickDelay(12000);

  110.     /* Waiting for clock ready */
  111.     CLK_WaitClockReady(CLK_CLKSTATUS_XTL_STB_Msk);


  112.     /* Switch HCLK clock source to XTL, STCLK to XTL */
  113.     CLK->CLKSEL0 = (CLK->CLKSEL0 & ~CLK_CLKSEL0_HCLK_S_Msk) | CLK_CLKSEL0_HCLK_S_XTAL;

  114.     /* Enable IP clock */
  115.     CLK->APBCLK = CLK_APBCLK_UART_EN_Msk;

  116.     /* IP clock source */
  117.     CLK->CLKSEL1 = ( CLK->CLKSEL1 & (~CLK_CLKSEL1_UART_S_Msk) ) |  CLK_CLKSEL1_UART_S_XTAL;

  118.     /* Update System Core Clock */
  119.     /* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */
  120.     SystemCoreClockUpdate();

  121.     /*---------------------------------------------------------------------------------------------------------*/
  122.     /* Init I/O Multi-function                                                                                 */
  123.     /*---------------------------------------------------------------------------------------------------------*/
  124.     /* Set P0 multi-function pins for UART RXD and TXD  */
  125.     SYS->P0_MFP &= ~(SYS_MFP_P00_Msk | SYS_MFP_P01_Msk);
  126.     SYS->P0_MFP |= (SYS_MFP_P00_TXD | SYS_MFP_P01_RXD);

  127.     /* Set P3.4 and P3.5 for I2C SDA and SCL */
  128.     SYS->P3_MFP = SYS_MFP_P34_SDA | SYS_MFP_P35_SCL;

  129.     /* Lock protected registers */
  130.     SYS_LockReg();
  131. }

  132. void UART_Init(void)
  133. {
  134.     /*---------------------------------------------------------------------------------------------------------*/
  135.     /* Init UART                                                                                               */
  136.     /*---------------------------------------------------------------------------------------------------------*/
  137.     UART_Open(UART, 115200);
  138. }


  139. /*---------------------------------------------------------------------------------------------------------*/
  140. /* MAIN function                                                                                           */
  141. /*---------------------------------------------------------------------------------------------------------*/

  142. int main(void)
  143. {
  144.     uint32_t u32Counter = 0, u32AdcData = 0, u32I2cData;
  145.     char AdcValue[15] = "ADC Value:";
  146.     char strClearAdcValue[15] = "ADC Value:     ";

  147.     /* Init System, IP clock and multi-function I/O */
  148.     SYS_Init();

  149.     /* Init UART for printf */
  150.     UART_Init();

  151.     /*---------------------------------------------------------------------------------------------------------*/
  152.     /* Init Other peripherals                                                                                  */
  153.     /*---------------------------------------------------------------------------------------------------------*/
  154.     LCD_Init();

  155.     /* Initialize I2C */
  156.     I2C_Init();
  157.     EEPROM_Init();
  158.     TMR0_Init();

  159.     /* Initialize ADC */
  160.     ADC_Init();

  161.     /* Initialize PWM */
  162.     PWM_Init();

  163.     /*
  164.         StartKit is used to demo Nu-LB_004 learning board. This sample will test EEPROM, SPI Flash read/write by
  165.         I2C, SPI. And test LED by GPIO and PWM. Test KEY by EINT0. Use ADC to convert the voltage of
  166.         variable resistor by AD0. Generate 4kHz key sound by buzzer with PWM. LCD display is enabled to show working
  167.         message. CPU will be idle by __WFI() when a loop has been done. Timer events (every 100ms) or key events are
  168.         used to wakeup CPU to execute next loop.
  169.     */

  170.     LCD_EnableBackLight();
  171.     LCD_ClearScreen();

  172.     printf("CPU [url=home.php?mod=space&uid=72445]@[/url] %dHz\n", SystemCoreClock);

  173.     // SPI test
  174.     LCD_Print(0, "Welcome! Nuvoton");
  175.     LCD_Print(1, "This is LB test ");

  176.     /*Initialize external interrupt*/
  177.     EINT0_Init();

  178.     while (1) {
  179.         if(u32Counter > 8) {
  180.             /* Disable Buzzer */
  181.             PWM->POE &= ~PWM_POE_PWM3_Msk;
  182.         }
  183.         printf("\nTest time: %d\n", u32Counter++);

  184.         /* LED test */
  185.         P2->DOUT=u32Counter;

  186.         /* ADC test */
  187.         ADC->ADSR = ( ADC->ADSR & (~ADC_ADSR_CHANNEL_Msk) ) | ADC_ADSR_ADF_Msk;
  188.         ADC->ADCR |= ADC_ADCR_ADST_Msk;
  189.         while(!(ADC->ADSR & ADC_ADSR_ADF_Msk));
  190.         u32AdcData = ADC->ADDR & 0xFFFUL;
  191.         printf("ADC value: %d\n", u32AdcData);
  192.         sprintf((char *)AdcValue + 10, "%d", u32AdcData);
  193.         LCD_Print(3, strClearAdcValue);
  194.         LCD_Print(3, AdcValue);
  195.         /* Single end, single mode, start convert */
  196.         ADC->ADCR = ADC_ADCR_ADEN_Msk | ADC_ADCR_ADST_Msk;

  197.         /*I2C test*/
  198.         u32AdcData = (u32Counter + u32AdcData) & 0xff;
  199.         EEPROM_Write(u32Counter,u32AdcData);
  200.         u32I2cData = EEPROM_Read(u32Counter);
  201.         if (u32I2cData != u32AdcData) {
  202.             LCD_Print(2, "I2C fail ");
  203.             while (1);
  204.         }
  205.         printf("I2C address:0x%x, Data:0x%x\n", u32Counter, u32I2cData);

  206.     }
  207. }




 楼主| 598330983 发表于 2017-2-19 19:21 | 显示全部楼层
  1. /******************************************************************************
  2. * @file     main.c
  3. * @version  V1.00
  4. * $Revision: 10 $
  5. * $Date: 15/10/06 11:23a $
  6. * @brief    This sample code demonstrates how to control a LCD
  7. *           module via SPI interface
  8. *
  9. * @note
  10. * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
  11. *****************************************************************************/
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15. #include <stdint.h>

  16. #include "Mini51Series.h"
  17. #include "LCD_Driver.h"

  18. // gpio interrupt uses to change the level periodically
  19. uint32_t g_level_change = 0;
  20. // there are five bright levels
  21. uint32_t brightlight_level[] = {1, 25, 50, 75, 95};

  22. uint32_t g_au32TMRINTCount = 0;

  23. /**
  24. * @brief       External INT0 IRQ
  25. *
  26. * @param       None
  27. *
  28. * [url=home.php?mod=space&uid=266161]@return[/url]      None
  29. *
  30. * [url=home.php?mod=space&uid=1543424]@Details[/url]     The External INT0(P3.2) default IRQ, declared in startup_Mini51.s.
  31. */
  32. void EINT0_IRQHandler(void)
  33. {
  34.     //printf("!@$^\n");
  35.     /* For P3.2, clear the INT flag */
  36.     GPIO_CLR_INT_FLAG(P3,1<<2);

  37.     if(g_level_change==4)
  38.         g_level_change = 0;
  39.     else
  40.         g_level_change++;
  41. }

  42. /**
  43. * @brief       Timer-1 IRQ
  44. *
  45. * @param       None
  46. *
  47. * @return      None
  48. *
  49. * @details     The TIMER1 default IRQ, declared in startup_Mini51.s.
  50. */
  51. void TMR1_IRQHandler(void)
  52. {
  53. #if 1
  54.     TIMER_ClearIntFlag(TIMER1);
  55. #else
  56.     if (TIMER_GetIntFlag(TIMER1) == 1) {
  57.         /* Clear TIMER1 Timeout Interrupt Flag */
  58.         TIMER_ClearIntFlag(TIMER1);
  59.     } else if (TIMER_GetCaptureIntFlag(TIMER1) == 1) {
  60.         /* Clear TIMER1 Capture Interrupt Flag */
  61.         TIMER_ClearCaptureIntFlag(TIMER1);
  62.     }
  63. #endif
  64.     g_au32TMRINTCount++;
  65.     if( brightlight_level[g_level_change] >=g_au32TMRINTCount ) {
  66.         /* dark LCD */
  67.         P54 =1;
  68.     } else {
  69.         /* bright LCD */
  70.         P54 = 0;
  71.         if(g_au32TMRINTCount>=100) {
  72.             g_au32TMRINTCount=0;
  73.         }
  74.     }
  75. }

  76. void SYS_Init(void)
  77. {
  78.     /* Unlock protected registers */
  79.     SYS_UnlockReg();

  80.     /* Set P5 multi-function pins for XTAL1 and XTAL2 */
  81.     SYS->P5_MFP &= ~(SYS_MFP_P50_Msk | SYS_MFP_P51_Msk);
  82.     SYS->P5_MFP |= (SYS_MFP_P50_XTAL1 | SYS_MFP_P51_XTAL2);

  83.     /* Enable Internal RC clock */
  84.     CLK->PWRCON |= CLK_PWRCON_XTL12M | CLK_PWRCON_OSC10K_EN_Msk | CLK_PWRCON_IRC22M_EN_Msk;

  85.     CLK_SysTickDelay(1200);

  86.     /* Waiting for IRC22M clock ready */
  87.     CLK_WaitClockReady(CLK_CLKSTATUS_XTL_STB_Msk | CLK_CLKSTATUS_IRC22M_STB_Msk);

  88.     /* IP clock divider */
  89.     CLK_SetSysTickClockSrc(CLK_CLKSEL0_STCLK_S_XTAL);

  90.     /* Switch HCLK clock source to XTL */
  91.     CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_XTAL,CLK_CLKDIV_HCLK(1));

  92.     /* Enable IP clock */
  93.     CLK_EnableModuleClock(UART_MODULE);
  94.     CLK_EnableModuleClock(TMR1_MODULE);

  95.     /* IP clock source */
  96.     CLK->CLKSEL1 = ( CLK->CLKSEL1 & ~(CLK_CLKSEL1_UART_S_Msk|CLK_CLKSEL1_TMR1_S_Msk) ) |  CLK_CLKSEL1_UART_S_XTAL | CLK_CLKSEL1_TMR1_S_HCLK;

  97.     /*---------------------------------------------------------------------------------------------------------*/
  98.     /* Init I/O Multi-function                                                                                 */
  99.     /*---------------------------------------------------------------------------------------------------------*/
  100.     /* Set P0 multi-function pins for UART RXD and TXD */
  101.     SYS->P0_MFP &= ~(SYS_MFP_P01_Msk | SYS_MFP_P00_Msk);
  102.     SYS->P0_MFP |= (SYS_MFP_P01_RXD | SYS_MFP_P00_TXD);

  103.     /* To update the variable SystemCoreClock */
  104.     SystemCoreClockUpdate();

  105.     /* Lock protected registers */
  106.     SYS_LockReg();
  107. }

  108. /**
  109.   * @brief  Main routine.
  110.   * @param  None.
  111.   * @return None.
  112.   */
  113. int32_t main(void)
  114. {
  115.     SYS_UnlockReg();

  116.     SYS_Init();

  117.     /* SPI test */
  118.     LCD_Init();
  119.     LCD_EnableBackLight();
  120.     LCD_ClearScreen();
  121.     LCD_Print(0, "Welcome! Nuvoton");
  122.     LCD_Print(1, "This is LB board");
  123.     LCD_Print(2, "Mini51");
  124.     LCD_Print(3, "TEST");

  125.     // back light control pin P5.4
  126.     GPIO_SetMode(P5,1<<4,GPIO_PMD_OUTPUT);

  127.     /* INT button triggers P3.2 */
  128.     GPIO_SetMode(P3,(1<<2),GPIO_PMD_OPEN_DRAIN);
  129.     GPIO_EnableInt(P3, 2, GPIO_INT_FALLING);
  130.     NVIC_EnableIRQ(EINT0_IRQn);

  131.     /* Enable interrupt de-bounce function and select de-bounce sampling cycle time */
  132.     GPIO_SET_DEBOUNCE_TIME(GPIO_DBNCECON_DBCLKSRC_HCLK,GPIO_DBNCECON_DBCLKSEL_16);
  133.     GPIO_ENABLE_DEBOUNCE(P3,1<<2);

  134.     /* Reset and stop TIMER0, TIMER1 counting first */
  135.     TIMER1->TCSR = TIMER_TCSR_CRST_Msk;

  136.     /* To Configure TCMPR values based on Timer clock source and pre-scale value */
  137.     TIMER_SET_PRESCALE_VALUE(TIMER1,0);

  138.     /* Open TIMER1 counting and setting*/
  139.     TIMER_Open(TIMER1,TIMER_PERIODIC_MODE,SystemCoreClock/1000);

  140.     /* Enable TIMER1 interrupt, NVIC */
  141.     NVIC_EnableIRQ(TMR1_IRQn);
  142.     TIMER_EnableInt(TIMER1);

  143.     /* Start TIMER1 */
  144.     TIMER_Start(TIMER1);

  145.     while(1) ;    // loop forever

  146. }

  147. /*** (C) COPYRIGHT 2012 Nuvoton Technology Corp. ***/


 楼主| 598330983 发表于 2017-2-19 19:21 | 显示全部楼层
  1. /******************************************************************************
  2. * @file     main.c
  3. * @version  V1.00
  4. * $Revision: 5 $
  5. * $Date: 15/10/06 11:04a $
  6. * @brief    Show hard fault information when hard fault happened
  7. *
  8. * @note
  9. * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
  10. *****************************************************************************/

  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14. #include <stdint.h>
  15. #include "Mini51Series.h"


  16. /*---------------------------------------------------------------------------------------------------------*/
  17. /* Global variables                                                                                        */
  18. /*---------------------------------------------------------------------------------------------------------*/


  19. /*---------------------------------------------------------------------------------------------------------*/
  20. /* Define functions prototype                                                                              */
  21. /*---------------------------------------------------------------------------------------------------------*/
  22. int32_t main(void);


  23. void SYS_Init(void)
  24. {
  25.     /*---------------------------------------------------------------------------------------------------------*/
  26.     /* Init System Clock                                                                                       */
  27.     /*---------------------------------------------------------------------------------------------------------*/
  28.     /* Unlock protected registers */
  29.     SYS_UnlockReg();

  30.     /* Set P5 multi-function pins for XTAL1 and XTAL2 */
  31.     SYS->P5_MFP &= ~(SYS_MFP_P50_Msk | SYS_MFP_P51_Msk);
  32.     SYS->P5_MFP |= (SYS_MFP_P50_XTAL1 | SYS_MFP_P51_XTAL2);

  33.     /* Enable External XTAL (4~24 MHz) */
  34.     CLK->PWRCON &= ~CLK_PWRCON_XTLCLK_EN_Msk;
  35.     CLK->PWRCON |= (0x1 << CLK_PWRCON_XTLCLK_EN_Pos); // XTAL12M (HXT) Enabled

  36.     /* Waiting for 12MHz clock ready */
  37.     CLK_WaitClockReady( CLK_CLKSTATUS_XTL_STB_Msk);

  38.     /* Switch HCLK clock source to XTAL */
  39.     CLK->CLKSEL0 &= ~CLK_CLKSEL0_HCLK_S_Msk;
  40.     CLK->CLKSEL0 |= CLK_CLKSEL0_HCLK_S_XTAL;

  41.     /* Enable IP clock */
  42.     CLK->APBCLK |= CLK_APBCLK_UART_EN_Msk; // UART Clock Enable

  43.     /* Select IP clock source */
  44.     CLK->CLKSEL1 &= ~CLK_CLKSEL1_UART_S_Msk;
  45.     CLK->CLKSEL1 |= (0x0 << CLK_CLKSEL1_UART_S_Pos);// Clock source from external 12 MHz or 32 KHz crystal clock

  46.     /* Update System Core Clock */
  47.     /* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */
  48.     SystemCoreClockUpdate();

  49.     /*---------------------------------------------------------------------------------------------------------*/
  50.     /* Init I/O Multi-function                                                                                 */
  51.     /*---------------------------------------------------------------------------------------------------------*/
  52.     /* Set P1 multi-function pins for UART RXD and TXD  */
  53.     SYS->P0_MFP &= ~(SYS_MFP_P00_Msk | SYS_MFP_P01_Msk);
  54.     SYS->P0_MFP = SYS_MFP_P00_TXD | SYS_MFP_P01_RXD;

  55.     /* Lock protected registers */
  56.     SYS_LockReg();

  57. }

  58. void UART_Init()
  59. {
  60.     /*---------------------------------------------------------------------------------------------------------*/
  61.     /* Init UART                                                                                               */
  62.     /*---------------------------------------------------------------------------------------------------------*/
  63.     UART_Open(UART, 115200);
  64. }

  65. /*---------------------------------------------------------------------------------------------------------*/
  66. /* MAIN function                                                                                           */
  67. /*---------------------------------------------------------------------------------------------------------*/

  68. int main(void)
  69. {
  70.     char *tmp = 0;

  71.     /* Init System, IP clock and multi-function I/O */
  72.     SYS_Init();
  73.     /* Init UART for printf */
  74.     UART_Init();

  75.     strcpy(tmp,"HardFaultTest");

  76.     while(1);

  77. }



heisexingqisi 发表于 2017-2-19 23:39 | 显示全部楼层
最基本的跑马灯,就是操作IO接口。
gejigeji521 发表于 2017-2-19 23:56 | 显示全部楼层
其实可以把注释掉的另外一个开发板用的代码通过预编译定义一个地方就行了。
yiyigirl2014 发表于 2017-2-20 00:13 | 显示全部楼层
PWM->POE |= PWM_POE_PWM3_Msk;
通过这个可以翻转IO。
mintspring 发表于 2017-2-20 00:17 | 显示全部楼层
  CLK->PWRCON |= CLK_PWRCON_XTL12M | CLK_PWRCON_IRC22M_EN_Msk;
这种代码,一般例子都会给出,我们用的时候照着抄就行了。
643757107 发表于 2017-2-20 19:21 | 显示全部楼层
/* Set P5.0 and P5.1 -> XTAL  */
    SYS->P5_MFP &= ~(SYS_MFP_P50_Msk | SYS_MFP_P51_Msk);
    SYS->P5_MFP |= (SYS_MFP_P50_XTAL1 | SYS_MFP_P51_XTAL2);
还可以配置管脚作为时钟的晶振接口。
 楼主| 598330983 发表于 2017-2-20 19:28 | 显示全部楼层
/* Select IP clock source */
    CLK->CLKSEL1 &= ~CLK_CLKSEL1_UART_S_Msk;
    CLK->CLKSEL1 |= (0x0 << CLK_CLKSEL1_UART_S_Pos);// Clock source from external 12 MHz or 32 KHz crystal clock
死死地。
heisexingqisi 发表于 2017-2-20 19:54 | 显示全部楼层
  /* PWM Timer0: Clk = HCLK / 120 / 16, Freq = clk / 6250, duty cycle = 3125/6250 % */
    /* PWM Timer1: Clk = HCLK / 120 / 16, Freq = clk / 3125, duty cycle = 1563/3125 % */
    /* PWM Timer2: Clk = HCLK / 60 / 16, Freq = clk / 3125, duty cycle = 1563/3125 % */
    /* PWM Timer3: Clk = HCLK / 60 / 1, Freq = clk / 50, duty cycle = 25/50 % */
    /* PWM0 = 12000000 / 120 / 16 / 6250 =    1Hz */
    /* PWM1 = 12000000 / 120 / 16 / 3125 =    2Hz */
    /* PWM2 = 12000000 /  60 / 16 / 3125 =    4Hz */
    /* PWM3 = 12000000 /  60 /  1 /   50 = 4000Hz */
这么多的选择和组合,例程序已经帮我们准备好了。
zhuomuniao110 发表于 2017-2-21 19:28 | 显示全部楼层
IO的翻转操作都是用逻辑运算实现。
wahahaheihei 发表于 2017-2-21 20:45 | 显示全部楼层
一般这些简单的板子自带的DEMO都是 Blink程序,用一个LED或多个LED实现不同的闪烁。
天灵灵地灵灵 发表于 2017-2-21 21:28 | 显示全部楼层
  /* Select IP clock source */
    CLK_SetModuleClock(UART_MODULE,CLK_CLKSEL1_UART_S_XTAL,CLK_CLKDIV_UART(1));
这个设置时钟模块的函数就是好用,每个模块都可以设置。
玛尼玛尼哄 发表于 2017-2-21 21:52 | 显示全部楼层
重置模块,打开串口。就可以启动串口了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

266

主题

5573

帖子

22

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

266

主题

5573

帖子

22

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