[DemoCode下载] NM1200硬件除法器使用方法

[复制链接]
1435|14
 楼主| wanduzi 发表于 2018-2-9 17:04 | 显示全部楼层 |阅读模式
  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: 1 $
  5. * $Date: 15/04/07 2:48p $
  6. * [url=home.php?mod=space&uid=247401]@brief[/url]    Show how to user divider API and how to use hardware divider
  7. *           by control registers
  8. *
  9. * @note
  10. * Copyright (C) 2015 Nuvoton Technology Corp. All rights reserved.
  11. *****************************************************************************/
  12. #include <stdio.h>
  13. #include "NM1200_NM1100.h"

  14. void SYS_Init(void)
  15. {
  16.     /*---------------------------------------------------------------------------------------------------------*/
  17.     /* Init System Clock                                                                                       */
  18.     /*---------------------------------------------------------------------------------------------------------*/

  19.     /* Register write-protection disabled */
  20.     SYS_UnlockReg();

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

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

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

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

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

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

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

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

  39. void HDIV_Init(void)
  40. {
  41.     /* Enable Hardware Divider Clock */
  42.     CLK->AHBCLK |= CLK_AHBCLK_HDIVCKEN_Msk;
  43. }

  44. /*---------------------------------------------------------------------------------------------------------*/
  45. /*  MAIN function                                                                                          */
  46. /*---------------------------------------------------------------------------------------------------------*/
  47. int main(void)
  48. {
  49.     /* Disable register write-protection function */
  50.     SYS_UnlockReg();

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

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

  55.     /* Enable Hardware Divider Clock */
  56.     HDIV_Init();

  57.     printf("+----------------------------------------------+\n");
  58.     printf("|         HDIV Divider Sample Code             |\n");
  59.     printf("+----------------------------------------------+\n");
  60.     printf("\n");

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

  63.     /* Lock protected registers */
  64.     SYS_LockReg();

  65.     printf("Done\n");

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

  68.     while(SYS->PDID);
  69.     return 0;
  70. }

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


 楼主| wanduzi 发表于 2018-2-9 17:06 | 显示全部楼层
直接调用相关函数就可以实现硬件除法了,不可以使用传统的数学计算。
yiyigirl2014 发表于 2018-2-9 17:41 | 显示全部楼层
也就是遇到除法运算操作,要调用这个函数才实现。
dongnanxibei 发表于 2018-2-10 17:25 | 显示全部楼层
用法挺简单的。
yiy 发表于 2018-2-10 20:06 | 显示全部楼层
好像新唐所有带硬件除法器的都是这么用。
mintspring 发表于 2018-2-11 10:20 | 显示全部楼层
M451好像也有这个功能。
antusheng 发表于 2018-2-11 11:41 | 显示全部楼层
不错不错,这个应该可以算浮点吧
huangcunxiake 发表于 2018-2-14 16:12 来自手机 | 显示全部楼层
昨天打扫卫生找到一个开发版,好像就支持这个功能
zhuomuniao110 发表于 2018-2-24 19:46 | 显示全部楼层
不知道后面是怎么调用的,是最大执行的数字是多大
小明的同学 发表于 2018-2-25 13:35 | 显示全部楼层
只能整数?
xixi2017 发表于 2018-2-26 20:45 | 显示全部楼层
等我找个其他系列的对比对比。
xixi2017 发表于 2018-2-26 20:45 | 显示全部楼层
有可能是用了一模一样的外设。
稳稳の幸福 发表于 2018-2-26 21:43 | 显示全部楼层
这个外设很好用,解决资源。
稳稳の幸福 发表于 2018-2-26 21:43 | 显示全部楼层
如果用CPU算,要很多周期。
734774645 发表于 2018-2-26 21:51 | 显示全部楼层

    while(SYS->PDID);
    return 0;
这是什么。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

156

主题

1882

帖子

3

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