打印
[应用方案]

BSP包里面的ISP_UART的改写

[复制链接]
1024|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
BSP包里面的ISP_UART的改写:

NUVOTON 提供了大量的实例。其中有最好用的ISP。

使用特权

评论回复
沙发
東南博士|  楼主 | 2021-6-2 07:23 | 只看该作者

使用特权

评论回复
板凳
東南博士|  楼主 | 2021-6-2 07:29 | 只看该作者

使用特权

评论回复
地板
東南博士|  楼主 | 2021-6-2 07:32 | 只看该作者

使用特权

评论回复
5
東南博士|  楼主 | 2021-6-2 07:32 | 只看该作者

使用特权

评论回复
6
東南博士|  楼主 | 2021-6-2 07:33 | 只看该作者

使用特权

评论回复
7
東南博士|  楼主 | 2021-6-2 07:34 | 只看该作者

使用特权

评论回复
8
東南博士|  楼主 | 2021-6-2 07:34 | 只看该作者

使用特权

评论回复
9
東南博士|  楼主 | 2021-6-2 07:36 | 只看该作者

使用特权

评论回复
10
東南博士|  楼主 | 2021-6-2 07:37 | 只看该作者

使用特权

评论回复
11
東南博士|  楼主 | 2021-6-2 07:38 | 只看该作者
使用ISP对我们的小卡进行程序更新。
参考的例程是:

\..M031_Series_BSP_CMSIS_V3.03.000\SampleCode\ISP\ISP_UART

使用特权

评论回复
12
東南博士|  楼主 | 2021-6-2 08:28 | 只看该作者
如果你使用的是其他的UART port,可能修改起来,有一些不便。我们再这里分析、改写一下:

使用特权

评论回复
13
東南博士|  楼主 | 2021-6-2 08:31 | 只看该作者
ISP_UART的主要文件结构:



fmc:操作flash;
isp:还是读写flash;
targetdev:获取了GetApromSize
uart_transfer:串口的读写部分,如果修改其他串口,主要是修改的这里;
main:主要是修改的这里SYS_Init;

使用特权

评论回复
14
東南博士|  楼主 | 2021-6-2 08:34 | 只看该作者
改写:

修改文件  targetdev.h

例如 我们修改原BSP包里面的端口号uart0修改为uart2

/* rename for uart_transfer.c */
#define UART_N                                  UART2
#define UART_N_IRQHandler                UART02_IRQHandler
#define UART_N_IRQn                         UART02_IRQn

使用特权

评论回复
15
東南博士|  楼主 | 2021-6-2 08:36 | 只看该作者
修改 uart_transfer.c里面文件:

void PutString(void)
{
    uint32_t i;

    for (i = 0; i < MAX_PKT_SIZE; i++)
    {
        while ((UART_N->FIFOSTS & UART_FIFOSTS_TXFULL_Msk));

        UART_N->DAT = response_buff[i];
    }
}

void UART_Init()
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init UART                                                                                               */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Select UART function mode */
    UART_N->FUNCSEL = ((UART_N->FUNCSEL & (~UART_FUNCSEL_FUNCSEL_Msk)) | UART_FUNCSEL_MODE);
    /* Set UART line configuration */
    UART_N->LINE = UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1;
    /* Set UART Rx and RTS trigger level */
    UART_N->FIFO = UART_FIFO_RFITL_14BYTES | UART_FIFO_RTSTRGLV_14BYTES;
    /* Set UART baud rate */
    UART_N->BAUD = (UART_BAUD_MODE2 | UART_BAUD_MODE2_DIVIDER(__HIRC, 115200));
    /* Set time-out interrupt comparator */
    UART_N->TOUT = (UART_N->TOUT & ~UART_TOUT_TOIC_Msk) | (0x40);
    NVIC_SetPriority(UART_N_IRQn, 2);
    NVIC_EnableIRQ(UART_N_IRQn);
    /* 0x0811 */
    UART_N->INTEN = (UART_INTEN_TOCNTEN_Msk | UART_INTEN_RXTOIEN_Msk | UART_INTEN_RDAIEN_Msk);
}

都把原来的端口号 UART0/UART2等UART PORT 修改为:UART_N

使用特权

评论回复
16
東南博士|  楼主 | 2021-6-2 08:42 | 只看该作者
修改 UART目标端口的clk使能与PIN分配:

void SYS_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init System Clock                                                                                       */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Unlock protected registers */
    SYS_UnlockReg();
    /* Enable HIRC clock (Internal RC 48MHz) */
    CLK->PWRCTL |= CLK_PWRCTL_HIRCEN_Msk;

    /* Wait for HIRC clock ready */
    while (!(CLK->STATUS & CLK_STATUS_HIRCSTB_Msk));

    /* Select HCLK clock source as HIRC and HCLK clock divider as 1 */
    CLK->CLKSEL0 = (CLK->CLKSEL0 & (~CLK_CLKSEL0_HCLKSEL_Msk)) | CLK_CLKSEL0_HCLKSEL_HIRC;
    CLK->CLKDIV0 = (CLK->CLKDIV0 & (~CLK_CLKDIV0_HCLKDIV_Msk)) | CLK_CLKDIV0_HCLK(1);
    /* Set PLL to Power-down mode */
    CLK->PLLCTL |= CLK_PLLCTL_PD_Msk;

    /* Enable UART module clock */
    CLK->APBCLK0 |= CLK_APBCLK0_UART2CKEN_Msk;
    /* Select UART module clock source as HXT and UART module clock divider as 1 */
    CLK->CLKSEL3 = (CLK->CLKSEL3 & (~CLK_CLKSEL3_UART2SEL_Msk)) | CLK_CLKSEL3_UART2SEL_HIRC;
    CLK->CLKDIV4 = (CLK->CLKDIV4 & (~CLK_CLKDIV4_UART2DIV_Msk)) | CLK_CLKDIV4_UART2(1);
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init I/O Multi-function                                                                                 */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Set PB multi-function pins for UART0 RXD=PB.12 and TXD=PB.13 */
    SYS->GPC_MFPL &= ~(SYS_GPC_MFPL_PC1MFP_Msk | SYS_GPC_MFPL_PC0MFP_Msk);
    SYS->GPC_MFPL |= (SYS_GPC_MFPL_PC1MFP_UART2_TXD | SYS_GPC_MFPL_PC0MFP_UART2_RXD);
}

使用特权

评论回复
17
東南博士|  楼主 | 2021-6-2 08:43 | 只看该作者
关于此部分的改写,可以自己手动改写;或者使用NUVOTON提供的软件:

使用特权

评论回复
18
東南博士|  楼主 | 2021-6-2 08:44 | 只看该作者
例如 使用内部HIRC 48MHZ;

分配 PC0/PC1为 UART2;

并且将UART2作为我们的ISP 固件APP更新的接口:

使用特权

评论回复
19
東南博士|  楼主 | 2021-6-2 08:46 | 只看该作者


生成的文件:

*.c source文件
*.h head文件
*.cfg 配置文件

使用特权

评论回复
20
東南博士|  楼主 | 2021-6-2 08:46 | 只看该作者
#ifndef __MYPROJECT031_H__
#define __MYPROJECT031_H__

#ifdef __cplusplus
extern "C"
{
#endif
void MyProject031_init_ice(void);
void MyProject031_deinit_ice(void);
void MyProject031_init_uart2(void);
void MyProject031_deinit_uart2(void);
void MyProject031_init(void);
void MyProject031_deinit(void);
#ifdef __cplusplus
}
#endif
#endif /*__MYPROJECT031_H__*/

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

367

主题

6048

帖子

34

粉丝