打印
[DemoCode下载]

NM1200硬件除法器使用方法

[复制链接]
1030|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wanduzi|  楼主 | 2018-2-9 17:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/******************************************************************************
* [url=home.php?mod=space&uid=288409]@file[/url]     main.c
* [url=home.php?mod=space&uid=895143]@version[/url]  V1.00
* $Revision: 1 $
* $Date: 15/04/07 2:48p $
* [url=home.php?mod=space&uid=247401]@brief[/url]    Show how to user divider API and how to use hardware divider
*           by control registers
*
* @note
* Copyright (C) 2015 Nuvoton Technology Corp. All rights reserved.
*****************************************************************************/
#include <stdio.h>
#include "NM1200_NM1100.h"

void SYS_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init System Clock                                                                                       */
    /*---------------------------------------------------------------------------------------------------------*/

    /* Register write-protection disabled */
    SYS_UnlockReg();

    /*  Read User Config to select internal high speed RC  */
    SystemInit();

    /* Enable external 12MHz XTAL (UART), HIRC */
    CLK->PWRCTL = CLK_PWRCTL_XTL12M | CLK_PWRCTL_HIRCEN_Msk;

    /* Waiting for clock ready */
    CLK_WaitClockReady(CLK_STATUS_XTLSTB_Msk | CLK_STATUS_HIRCSTB_Msk);

    /* Switch HCLK clock source to XTL */
    CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_XTAL,CLK_CLKDIV_HCLK(1));

    /* Enable IP clock */
    CLK->APBCLK = CLK_APBCLK_UART0CKEN_Msk;

    /* Select UART clock source from external crystal*/
    CLK->CLKSEL1 = (CLK->CLKSEL1 & ~CLK_CLKSEL1_UART0SEL_Msk) | CLK_CLKSEL1_UART0SEL_XTAL;

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

    /* Set P1 multi-function pins for UART RXD, TXD */
    SYS->P0_MFP = SYS_MFP_P00_TXD | SYS_MFP_P01_RXD;
}

void HDIV_Init(void)
{
    /* Enable Hardware Divider Clock */
    CLK->AHBCLK |= CLK_AHBCLK_HDIVCKEN_Msk;
}

/*---------------------------------------------------------------------------------------------------------*/
/*  MAIN function                                                                                          */
/*---------------------------------------------------------------------------------------------------------*/
int main(void)
{
    /* Disable register write-protection function */
    SYS_UnlockReg();

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

    /* Init UART to 115200-8n1 for print message */
    UART_Open(UART0, 115200);

    /* Enable Hardware Divider Clock */
    HDIV_Init();

    printf("+----------------------------------------------+\n");
    printf("|         HDIV Divider Sample Code             |\n");
    printf("+----------------------------------------------+\n");
    printf("\n");

    printf("12341 / 123 = %d\n", HDIV_Div(12341, 123));
    printf("12341 %% 123 = %d\n", HDIV_Mod(12341, 123));

    /* Lock protected registers */
    SYS_LockReg();

    printf("Done\n");

    /* Disabl Hardware Divider Clock */
    CLK->AHBCLK &= ~CLK_AHBCLK_HDIVCKEN_Msk;

    while(SYS->PDID);
    return 0;
}

/*** (C) COPYRIGHT 2015 Nuvoton Technology Corp. ***/


沙发
wanduzi|  楼主 | 2018-2-9 17:06 | 只看该作者
直接调用相关函数就可以实现硬件除法了,不可以使用传统的数学计算。

使用特权

评论回复
板凳
yiyigirl2014| | 2018-2-9 17:41 | 只看该作者
也就是遇到除法运算操作,要调用这个函数才实现。

使用特权

评论回复
地板
dongnanxibei| | 2018-2-10 17:25 | 只看该作者
用法挺简单的。

使用特权

评论回复
5
yiy| | 2018-2-10 20:06 | 只看该作者
好像新唐所有带硬件除法器的都是这么用。

使用特权

评论回复
6
mintspring| | 2018-2-11 10:20 | 只看该作者
M451好像也有这个功能。

使用特权

评论回复
7
antusheng| | 2018-2-11 11:41 | 只看该作者
不错不错,这个应该可以算浮点吧

使用特权

评论回复
8
huangcunxiake| | 2018-2-14 16:12 | 只看该作者
昨天打扫卫生找到一个开发版,好像就支持这个功能

使用特权

评论回复
9
zhuomuniao110| | 2018-2-24 19:46 | 只看该作者
不知道后面是怎么调用的,是最大执行的数字是多大

使用特权

评论回复
10
小明的同学| | 2018-2-25 13:35 | 只看该作者
只能整数?

使用特权

评论回复
11
xixi2017| | 2018-2-26 20:45 | 只看该作者
等我找个其他系列的对比对比。

使用特权

评论回复
12
xixi2017| | 2018-2-26 20:45 | 只看该作者
有可能是用了一模一样的外设。

使用特权

评论回复
13
稳稳の幸福| | 2018-2-26 21:43 | 只看该作者
这个外设很好用,解决资源。

使用特权

评论回复
14
稳稳の幸福| | 2018-2-26 21:43 | 只看该作者
如果用CPU算,要很多周期。

使用特权

评论回复
15
734774645| | 2018-2-26 21:51 | 只看该作者

    while(SYS->PDID);
    return 0;
这是什么。

使用特权

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

本版积分规则

144

主题

1732

帖子

3

粉丝