[DemoCode下载] M480串口固件升级

[复制链接]
1589|8
 楼主| 598330983 发表于 2018-10-21 18:17 | 显示全部楼层 |阅读模式
  1. /**************************************************************************//**
  2. * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
  3. * [url=home.php?mod=space&uid=895143]@version[/url]  2.0.0
  4. * [url=home.php?mod=space&uid=212281]@date[/url]     20, June, 2017
  5. * [url=home.php?mod=space&uid=247401]@brief[/url]    Use MKROM API to do internal ISP. This sample code is run at LDROM,
  6. *           and use API to update APROM. After reset the system, the program
  7. *           will boot from APROM.
  8. *
  9. * [url=home.php?mod=space&uid=17282]@CopyRight[/url] (C) 2017 Nuvoton Technology Corp. All rights reserved.
  10. ******************************************************************************/
  11. #include <stdio.h>
  12. #include "bootisplib.h"

  13. void UART1_IRQHandler(void)
  14. {
  15.     UART1_ISR();
  16. }

  17. void SYS_Init(void)
  18. {
  19.     uint32_t volatile i;

  20.     /* Unlock protected registers */
  21.     SYS_UnlockReg();

  22.     /* Set XT1_OUT(PF.2) and XT1_IN(PF.3) to input mode */
  23.     PF->MODE &= ~(GPIO_MODE_MODE2_Msk | GPIO_MODE_MODE3_Msk);

  24.     /* Enable External XTAL (4~24 MHz) */
  25.     CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

  26.     /* Waiting for 12MHz clock ready */
  27.     CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

  28.     /* Switch HCLK clock source to HXT */
  29.     CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HXT,CLK_CLKDIV0_HCLK(1));

  30.     /* Set core clock as PLL_CLOCK from PLL */
  31.     CLK_SetCoreClock(FREQ_192MHZ);

  32.     /* Set both PCLK0 and PCLK1 as HCLK/2 */
  33.     CLK->PCLKDIV = CLK_PCLKDIV_PCLK0DIV2 | CLK_PCLKDIV_PCLK1DIV2;

  34.     /* Select IP clock source */
  35.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_HXT, CLK_CLKDIV0_UART0(1));

  36.     /* Enable IP clock */
  37.     CLK_EnableModuleClock(UART0_MODULE);


  38.     /* Set GPB multi-function pins for UART0 RXD and TXD */
  39.     SYS->GPB_MFPH &= ~(SYS_GPB_MFPH_PB12MFP_Msk | SYS_GPB_MFPH_PB13MFP_Msk);
  40.     SYS->GPB_MFPH |= (SYS_GPB_MFPH_PB12MFP_UART0_RXD | SYS_GPB_MFPH_PB13MFP_UART0_TXD);

  41. }


  42. int32_t main (void)
  43. {
  44.     uint32_t au32Config[2];

  45.     SYS_Init();
  46.     UART_Open(UART0, 115200);

  47.     printf("\n");
  48.     printf("+----------------------------------------+\n");
  49.     printf("|      M480 firmware update by UART1     |\n");
  50.     printf("+----------------------------------------+\n");

  51.     /*******************************************************/
  52.     /* MKROM support UART1 ISP, should initial UART1 first */
  53.     /*******************************************************/
  54.     /* UART1: TX = PB.7, RX = PB.6 */
  55.     SYS->GPB_MFPL &= ~(SYS_GPB_MFPL_PB6MFP_Msk | SYS_GPB_MFPL_PB7MFP_Msk);
  56.     SYS->GPB_MFPL |= ((6ul << SYS_GPB_MFPL_PB6MFP_Pos) | (6ul << SYS_GPB_MFPL_PB7MFP_Pos));
  57.     /* UART1 line configuration for (115200,n,8,1) */
  58.     CLK->CLKSEL1 |= CLK_CLKSEL1_UART1SEL_Msk;   /* HIRC */
  59.     CLK->APBCLK0 |= CLK_APBCLK0_UART1CKEN_Msk;
  60.     UART1->LINE = UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1;
  61.     UART1->FIFO = UART_FIFO_RFITL_14BYTES | UART_FIFO_RTSTRGLV_14BYTES;
  62.     UART1->BAUD = (UART_BAUD_MODE2 | UART_BAUD_MODE2_DIVIDER(__HIRC, 115200));
  63.     UART1->TOUT = 0x40;
  64.     NVIC_SetPriority (UART1_IRQn, 2);
  65.     NVIC_EnableIRQ(UART1_IRQn);
  66.     UART1->INTEN = (UART_INTEN_TOCNTEN_Msk | UART_INTEN_RXTOIEN_Msk | UART_INTEN_RDAIEN_Msk);

  67.     /***********************************************************/
  68.     /* This sample is running at LDROM. Will update the APROM. */
  69.     /* Change the boot select to boot from APROM               */
  70.     /***********************************************************/
  71.     SYS_UnlockReg();
  72.     /* Enable FMC ISP function */
  73.     CLK->AHBCLK |= CLK_AHBCLK_ISPCKEN_Msk;
  74.     FMC_Open();

  75.     FMC_ReadConfig(au32Config, 2);
  76.     FMC_ENABLE_CFG_UPDATE();
  77.     if ((au32Config[0] & 0x80) == 0x80) /* boot from APROM */
  78.         au32Config[0] &= ~0x80;
  79.     else
  80.         au32Config[0] |= 0x80;
  81.     FMC_WriteConfig(au32Config, 2);


  82.     UART1_ISP();
  83.     while(1);
  84. }



  85. /*** (C) COPYRIGHT 2017 Nuvoton Technology Corp. ***/



 楼主| 598330983 发表于 2018-10-21 18:18 | 显示全部楼层
非常牛叉的一个芯片。
 楼主| 598330983 发表于 2018-10-21 18:19 | 显示全部楼层
提供多种升级方式。
 楼主| 598330983 发表于 2018-10-21 18:20 | 显示全部楼层
小明的同学 发表于 2018-10-21 20:40 | 显示全部楼层
如果可以使用网络更给力。
heisexingqisi 发表于 2018-10-21 21:23 | 显示全部楼层
FMC的应用
小灵通2018 发表于 2018-10-21 22:53 | 显示全部楼层
贼溜啊。
fsss007 发表于 2018-11-12 20:19 | 显示全部楼层
bootisplib.h?
huahuagg 发表于 2018-11-18 21:02 | 显示全部楼层
如果能图形化配置选择这些配置就好了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

267

主题

5575

帖子

22

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