[DemoCode下载] I2S的使用

[复制链接]
 楼主| heisexingqisi 发表于 2024-5-18 21:06 | 显示全部楼层 |阅读模式
  1. /**************************************************************************//**
  2. * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
  3. * [url=home.php?mod=space&uid=895143]@version[/url]  V2.00
  4. * [url=home.php?mod=space&uid=247401]@brief[/url]    This is an I2S demo using NAU8822/88L25 audio codec, and used to play
  5. *           back the input from line-in or MIC interface..
  6. *
  7. * [url=home.php?mod=space&uid=17282]@CopyRight[/url] (C) 2016 Nuvoton Technology Corp. All rights reserved.
  8. *
  9. ******************************************************************************/
  10. #include <stdio.h>
  11. #include <string.h>
  12. #include "NuMicro.h"
  13. #include "config.h"

  14. #define NAU8822     0

  15. uint32_t PcmBuff[BUFF_LEN] = {0};
  16. uint32_t volatile u32BuffPos = 0;

  17. #if NAU8822

  18. /*---------------------------------------------------------------------------------------------------------*/
  19. /*  Write 9-bit data to 7-bit address register of NAU8822 with I2C2                                        */
  20. /*---------------------------------------------------------------------------------------------------------*/
  21. void I2C_WriteNAU8822(uint8_t u8addr, uint16_t u16data)
  22. {

  23.     I2C_START(I2C2);
  24.     I2C_WAIT_READY(I2C2);

  25.     I2C_SET_DATA(I2C2, 0x1A<<1);
  26.     I2C_SET_CONTROL_REG(I2C2, I2C_CTL_SI);
  27.     I2C_WAIT_READY(I2C2);

  28.     I2C_SET_DATA(I2C2, (uint8_t)((u8addr << 1) | (u16data >> 8)));
  29.     I2C_SET_CONTROL_REG(I2C2, I2C_CTL_SI);
  30.     I2C_WAIT_READY(I2C2);

  31.     I2C_SET_DATA(I2C2, (uint8_t)(u16data & 0x00FF));
  32.     I2C_SET_CONTROL_REG(I2C2, I2C_CTL_SI);
  33.     I2C_WAIT_READY(I2C2);

  34.     I2C_STOP(I2C2);
  35. }

  36. /*---------------------------------------------------------------------------------------------------------*/
  37. /*  NAU8822 Settings with I2C interface                                                                    */
  38. /*---------------------------------------------------------------------------------------------------------*/
  39. void NAU8822_Setup()
  40. {
  41.     printf("\nConfigure NAU8822 ...");

  42.     I2C_WriteNAU8822(0,  0x000);   /* Reset all registers */
  43.     CLK_SysTickDelay(10000);

  44.     I2C_WriteNAU8822(1,  0x02F);
  45.     I2C_WriteNAU8822(2,  0x1B3);   /* Enable L/R Headphone, ADC Mix/Boost, ADC */
  46.     I2C_WriteNAU8822(3,  0x07F);   /* Enable L/R main mixer, DAC */
  47.     I2C_WriteNAU8822(4,  0x010);   /* 16-bit word length, I2S format, Stereo */
  48.     I2C_WriteNAU8822(5,  0x000);   /* Companding control and loop back mode (all disable) */
  49.     I2C_WriteNAU8822(6,  0x1AD);   /* Divide by 6, 16K */
  50.     I2C_WriteNAU8822(7,  0x006);   /* 16K for internal filter coefficients */
  51.     I2C_WriteNAU8822(10, 0x008);   /* DAC soft mute is disabled, DAC oversampling rate is 128x */
  52.     I2C_WriteNAU8822(14, 0x108);   /* ADC HP filter is disabled, ADC oversampling rate is 128x */
  53.     I2C_WriteNAU8822(15, 0x1EF);   /* ADC left digital volume control */
  54.     I2C_WriteNAU8822(16, 0x1EF);   /* ADC right digital volume control */

  55.     I2C_WriteNAU8822(44, 0x000);   /* LLIN/RLIN is not connected to PGA */
  56.     I2C_WriteNAU8822(47, 0x050);   /* LLIN connected, and its Gain value */
  57.     I2C_WriteNAU8822(48, 0x050);   /* RLIN connected, and its Gain value */
  58.     I2C_WriteNAU8822(50, 0x001);   /* Left DAC connected to LMIX */
  59.     I2C_WriteNAU8822(51, 0x001);   /* Right DAC connected to RMIX */

  60.     printf("[OK]\n");
  61. }

  62. #else   // NAU88L25

  63. uint8_t I2cWrite_MultiByteforNAU88L25(uint8_t chipadd,uint16_t subaddr, const uint8_t *p,uint32_t len)
  64. {
  65.     /* Send START */
  66.     I2C_START(I2C2);
  67.     I2C_WAIT_READY(I2C2);

  68.     /* Send device address */
  69.     I2C_SET_DATA(I2C2, chipadd);
  70.     I2C_SET_CONTROL_REG(I2C2, I2C_CTL_SI);
  71.     I2C_WAIT_READY(I2C2);

  72.     /* Send register number and MSB of data */
  73.     I2C_SET_DATA(I2C2, (uint8_t)(subaddr>>8));
  74.     I2C_SET_CONTROL_REG(I2C2, I2C_CTL_SI);
  75.     I2C_WAIT_READY(I2C2);

  76.     /* Send register number and MSB of data */
  77.     I2C_SET_DATA(I2C2, (uint8_t)(subaddr));
  78.     I2C_SET_CONTROL_REG(I2C2, I2C_CTL_SI);
  79.     I2C_WAIT_READY(I2C2);

  80.     /* Send data */
  81.     I2C_SET_DATA(I2C2, p[0]);
  82.     I2C_SET_CONTROL_REG(I2C2, I2C_CTL_SI);
  83.     I2C_WAIT_READY(I2C2);

  84.     /* Send data */
  85.     I2C_SET_DATA(I2C2, p[1]);
  86.     I2C_SET_CONTROL_REG(I2C2, I2C_CTL_SI);
  87.     I2C_WAIT_READY(I2C2);

  88.     /* Send STOP */
  89.     I2C_STOP(I2C2);

  90.     return  0;
  91. }

  92. uint8_t I2C_WriteNAU88L25(uint16_t addr,uint16_t dat)
  93. {
  94.     uint8_t Tx_Data0[2];

  95.     Tx_Data0[0] = (uint8_t)(dat >> 8);
  96.     Tx_Data0[1] = (uint8_t)(dat & 0x00FF);

  97.     return ( I2cWrite_MultiByteforNAU88L25(0x1A << 1,addr,&Tx_Data0[0],2) );
  98. }

  99. void NAU88L25_Reset(void)
  100. {
  101.     I2C_WriteNAU88L25(0,  0x1);
  102.     I2C_WriteNAU88L25(0,  0);   // Reset all registers
  103.     CLK_SysTickDelay(10000);

  104.     printf("NAU88L25 Software Reset.\n");
  105. }

  106. void NAU88L25_Setup(void)
  107. {
  108.     I2C_WriteNAU88L25(0x0003,  0x8053);
  109.     I2C_WriteNAU88L25(0x0004,  0x0001);
  110.     I2C_WriteNAU88L25(0x0005,  0x3126);
  111.     I2C_WriteNAU88L25(0x0006,  0x0008);
  112.     I2C_WriteNAU88L25(0x0007,  0x0010);
  113.     I2C_WriteNAU88L25(0x0008,  0xC000);
  114.     I2C_WriteNAU88L25(0x0009,  0x6000);
  115.     I2C_WriteNAU88L25(0x000A,  0xF13C);
  116.     I2C_WriteNAU88L25(0x000C,  0x0048);
  117.     I2C_WriteNAU88L25(0x000D,  0x0000);
  118.     I2C_WriteNAU88L25(0x000F,  0x0000);
  119.     I2C_WriteNAU88L25(0x0010,  0x0000);
  120.     I2C_WriteNAU88L25(0x0011,  0x0000);
  121.     I2C_WriteNAU88L25(0x0012,  0xFFFF);
  122.     I2C_WriteNAU88L25(0x0013,  0x0015);
  123.     I2C_WriteNAU88L25(0x0014,  0x0110);
  124.     I2C_WriteNAU88L25(0x0015,  0x0000);
  125.     I2C_WriteNAU88L25(0x0016,  0x0000);
  126.     I2C_WriteNAU88L25(0x0017,  0x0000);
  127.     I2C_WriteNAU88L25(0x0018,  0x0000);
  128.     I2C_WriteNAU88L25(0x0019,  0x0000);
  129.     I2C_WriteNAU88L25(0x001A,  0x0000);
  130.     I2C_WriteNAU88L25(0x001B,  0x0000);
  131.     I2C_WriteNAU88L25(0x001C,  0x0002);
  132.     I2C_WriteNAU88L25(0x001D,  0x301a);   //301A:Master, BCLK_DIV=12.288M/8=1.536M, LRC_DIV=1.536M/32=48K
  133.     I2C_WriteNAU88L25(0x001E,  0x0000);
  134.     I2C_WriteNAU88L25(0x001F,  0x0000);
  135.     I2C_WriteNAU88L25(0x0020,  0x0000);
  136.     I2C_WriteNAU88L25(0x0021,  0x0000);
  137.     I2C_WriteNAU88L25(0x0022,  0x0000);
  138.     I2C_WriteNAU88L25(0x0023,  0x0000);
  139.     I2C_WriteNAU88L25(0x0024,  0x0000);
  140.     I2C_WriteNAU88L25(0x0025,  0x0000);
  141.     I2C_WriteNAU88L25(0x0026,  0x0000);
  142.     I2C_WriteNAU88L25(0x0027,  0x0000);
  143.     I2C_WriteNAU88L25(0x0028,  0x0000);
  144.     I2C_WriteNAU88L25(0x0029,  0x0000);
  145.     I2C_WriteNAU88L25(0x002A,  0x0000);
  146.     I2C_WriteNAU88L25(0x002B,  0x0012);
  147.     I2C_WriteNAU88L25(0x002C,  0x0082);
  148.     I2C_WriteNAU88L25(0x002D,  0x0000);
  149.     I2C_WriteNAU88L25(0x0030,  0x00CF);
  150.     I2C_WriteNAU88L25(0x0031,  0x0000);
  151.     I2C_WriteNAU88L25(0x0032,  0x0000);
  152.     I2C_WriteNAU88L25(0x0033,  0x009E);
  153.     I2C_WriteNAU88L25(0x0034,  0x029E);
  154.     I2C_WriteNAU88L25(0x0038,  0x1486);
  155.     I2C_WriteNAU88L25(0x0039,  0x0F12);
  156.     I2C_WriteNAU88L25(0x003A,  0x25FF);
  157.     I2C_WriteNAU88L25(0x003B,  0x3457);
  158.     I2C_WriteNAU88L25(0x0045,  0x1486);
  159.     I2C_WriteNAU88L25(0x0046,  0x0F12);
  160.     I2C_WriteNAU88L25(0x0047,  0x25F9);
  161.     I2C_WriteNAU88L25(0x0048,  0x3457);
  162.     I2C_WriteNAU88L25(0x004C,  0x0000);
  163.     I2C_WriteNAU88L25(0x004D,  0x0000);
  164.     I2C_WriteNAU88L25(0x004E,  0x0000);
  165.     I2C_WriteNAU88L25(0x0050,  0x2007);
  166.     I2C_WriteNAU88L25(0x0051,  0x0000);
  167.     I2C_WriteNAU88L25(0x0053,  0xC201);
  168.     I2C_WriteNAU88L25(0x0054,  0x0C95);
  169.     I2C_WriteNAU88L25(0x0055,  0x0000);
  170.     I2C_WriteNAU88L25(0x0058,  0x1A14);
  171.     I2C_WriteNAU88L25(0x0059,  0x00FF);
  172.     I2C_WriteNAU88L25(0x0066,  0x0060);
  173.     I2C_WriteNAU88L25(0x0068,  0xC300);
  174.     I2C_WriteNAU88L25(0x0069,  0x0000);
  175.     I2C_WriteNAU88L25(0x006A,  0x0083);
  176.     I2C_WriteNAU88L25(0x0071,  0x0011);
  177.     I2C_WriteNAU88L25(0x0072,  0x0260);
  178.     I2C_WriteNAU88L25(0x0073,  0x332C);
  179.     I2C_WriteNAU88L25(0x0074,  0x4502);
  180.     I2C_WriteNAU88L25(0x0076,  0x3140);
  181.     I2C_WriteNAU88L25(0x0077,  0x0000);
  182.     I2C_WriteNAU88L25(0x007F,  0x553F);
  183.     I2C_WriteNAU88L25(0x0080,  0x0420);
  184.     I2C_WriteNAU88L25(0x0001,  0x07D4);

  185.     printf("NAU88L25 Configured done.\n");
  186. }
  187. #endif

  188. void SYS_Init(void)
  189. {
  190.     /* Unlock protected registers */
  191.     SYS_UnlockReg();

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

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

  196.     /* Waiting for 12MHz clock ready */
  197.     CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

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

  200.     /* Set core clock as PLL_CLOCK from PLL */
  201.     CLK_SetCoreClock(FREQ_192MHZ);

  202.     /* Set both PCLK0 and PCLK1 as HCLK/2 */
  203.     CLK->PCLKDIV = CLK_PCLKDIV_APB0DIV_DIV2 | CLK_PCLKDIV_APB1DIV_DIV2;

  204.     /* Enable UART module clock */
  205.     CLK_EnableModuleClock(UART0_MODULE);

  206.     /* Enable I2S0 module clock */
  207.     CLK_EnableModuleClock(I2S0_MODULE);

  208.     /* Enable I2C2 module clock */
  209.     CLK_EnableModuleClock(I2C2_MODULE);

  210.     /* Select UART module clock source */
  211.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_HXT, CLK_CLKDIV0_UART0(1));


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

  215.     SYS->GPF_MFPL = (SYS->GPF_MFPL & ~(SYS_GPF_MFPL_PF6MFP_Msk|SYS_GPF_MFPL_PF7MFP_Msk)) |
  216.                     (SYS_GPF_MFPL_PF6MFP_I2S0_LRCK|SYS_GPF_MFPL_PF7MFP_I2S0_DO);
  217.     SYS->GPF_MFPH = (SYS->GPF_MFPH & ~(SYS_GPF_MFPH_PF8MFP_Msk|SYS_GPF_MFPH_PF9MFP_Msk|SYS_GPF_MFPH_PF10MFP_Msk)) |
  218.                     (SYS_GPF_MFPH_PF8MFP_I2S0_DI|SYS_GPF_MFPH_PF9MFP_I2S0_MCLK|SYS_GPF_MFPH_PF10MFP_I2S0_BCLK );

  219.     SYS->GPD_MFPL &= ~(SYS_GPD_MFPL_PD0MFP_Msk | SYS_GPD_MFPL_PD1MFP_Msk);
  220.     SYS->GPD_MFPL |= (SYS_GPD_MFPL_PD0MFP_I2C2_SDA | SYS_GPD_MFPL_PD1MFP_I2C2_SCL);

  221.     PF->SMTEN |= GPIO_SMTEN_SMTEN10_Msk;
  222.     PD->SMTEN |= GPIO_SMTEN_SMTEN1_Msk;
  223. }

  224. void I2C2_Init(void)
  225. {
  226.     /* Open I2C2 and set clock to 100k */
  227.     I2C_Open(I2C2, 100000);

  228.     /* Get I2C2 Bus Clock */
  229.     printf("I2C clock %d Hz\n", I2C_GetBusClockFreq(I2C2));

  230. }


  231. int32_t main (void)
  232. {
  233.     uint32_t u32startFlag = 1;

  234.     /* Unlock protected registers */
  235.     SYS_UnlockReg();

  236.     /* Init System, peripheral clock and multi-function I/O */
  237.     SYS_Init();

  238.     /* Lock protected registers */
  239.     SYS_LockReg();

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

  242.     printf("+------------------------------------------------------------------------+\n");
  243.     printf("|                   I2S Driver Sample Code with WAU88L25                 |\n");
  244.     printf("+------------------------------------------------------------------------+\n");
  245.     printf("  NOTE: This sample code needs to work with WAU88L25.\n");

  246.     /* Init I2C2 to access Codec */
  247.     I2C2_Init();

  248.     // Plug-In DET
  249.     SYS->GPA_MFPL = (SYS->GPA_MFPL & ~(SYS_GPA_MFPL_PA4MFP_Msk));
  250.     GPIO_SetMode(PA, BIT4, GPIO_MODE_OUTPUT);
  251.     PA4 = 1;

  252. #if (!NAU8822)
  253.     /* Reset NAU88L25 codec */
  254.     NAU88L25_Reset();
  255. #endif

  256.     /* Open I2S0 interface and set to slave mode, stereo channel, I2S format */
  257.     I2S_Open(I2S0, I2S_MODE_SLAVE, 16000, I2S_DATABIT_16, I2S_DISABLE_MONO, I2S_FORMAT_I2S);
  258.     NVIC_EnableIRQ(I2S0_IRQn);

  259.     /* Set PE.13 low to enable phone jack on NuMaker board. */
  260.     SYS->GPE_MFPH &= ~(SYS_GPE_MFPH_PE13MFP_Msk);
  261.     GPIO_SetMode(PE, BIT13, GPIO_MODE_OUTPUT);
  262.     PE13 = 0;

  263.     // select source from HXT(12MHz)
  264.     CLK_SetModuleClock(I2S0_MODULE, CLK_CLKSEL3_I2S0SEL_HXT, 0);

  265.     /* Set MCLK and enable MCLK */
  266.     I2S_EnableMCLK(I2S0, 12000000);

  267. #if NAU8822
  268.     /* Initialize NAU8822 codec */
  269.     NAU8822_Setup();
  270. #else
  271.     I2S0->CTL0 |= I2S_CTL0_ORDER_Msk;
  272.     /* Initialize NAU88L25 codec */
  273.     CLK_SysTickDelay(20000);
  274.     NAU88L25_Setup();
  275. #endif

  276.     /* Enable Rx threshold level interrupt */
  277.     I2S_EnableInt(I2S0, I2S_IEN_RXTHIEN_Msk);

  278.     /* Enable I2S Rx function to receive data */
  279.     I2S_ENABLE_RX(I2S0);

  280.     while(1)
  281.     {
  282.         if (u32startFlag)
  283.         {
  284.             /* Enable I2S Tx function to send data when data in the buffer is more than half of buffer size */
  285.             if (u32BuffPos >= BUFF_LEN/2)
  286.             {
  287.                 I2S_EnableInt(I2S0, I2S_IEN_TXTHIEN_Msk);
  288.                 I2S_ENABLE_TX(I2S0);
  289.                 u32startFlag = 0;
  290.             }
  291.         }
  292.     }
  293. }

  294. /*** (C) COPYRIGHT 2016 Nuvoton Technology Corp. ***/


 楼主| heisexingqisi 发表于 2024-5-18 21:06 | 显示全部楼层
第一步使能I2S
  1.     /* Enable I2S0 module clock */
  2.     CLK_EnableModuleClock(I2S0_MODULE);
 楼主| heisexingqisi 发表于 2024-5-18 21:07 | 显示全部楼层
第二步配置外设使用的引脚
  1.     SYS->GPF_MFPL = (SYS->GPF_MFPL & ~(SYS_GPF_MFPL_PF6MFP_Msk|SYS_GPF_MFPL_PF7MFP_Msk)) |
  2.                     (SYS_GPF_MFPL_PF6MFP_I2S0_LRCK|SYS_GPF_MFPL_PF7MFP_I2S0_DO);
  3.     SYS->GPF_MFPH = (SYS->GPF_MFPH & ~(SYS_GPF_MFPH_PF8MFP_Msk|SYS_GPF_MFPH_PF9MFP_Msk|SYS_GPF_MFPH_PF10MFP_Msk)) |
  4.                     (SYS_GPF_MFPH_PF8MFP_I2S0_DI|SYS_GPF_MFPH_PF9MFP_I2S0_MCLK|SYS_GPF_MFPH_PF10MFP_I2S0_BCLK );
 楼主| heisexingqisi 发表于 2024-5-18 21:09 | 显示全部楼层
第三步,配置该模块,并启用,同时开启该模块的中断功能。
  1.     /* Open I2S0 interface and set to slave mode, stereo channel, I2S format */
  2.     I2S_Open(I2S0, I2S_MODE_SLAVE, 16000, I2S_DATABIT_16, I2S_DISABLE_MONO, I2S_FORMAT_I2S);
  3.     NVIC_EnableIRQ(I2S0_IRQn);
 楼主| heisexingqisi 发表于 2024-5-18 21:10 | 显示全部楼层
设置该外设的时钟源为外部高速时钟,并设置该外设的时钟主频为12MHz
  1.     // select source from HXT(12MHz)
  2.     CLK_SetModuleClock(I2S0_MODULE, CLK_CLKSEL3_I2S0SEL_HXT, 0);

  3.     /* Set MCLK and enable MCLK */
  4.     I2S_EnableMCLK(I2S0, 12000000);
 楼主| heisexingqisi 发表于 2024-5-18 21:12 | 显示全部楼层
使能I2S阈值中断
使能接收。
  1.     /* Enable Rx threshold level interrupt */
  2.     I2S_EnableInt(I2S0, I2S_IEN_RXTHIEN_Msk);

  3.     /* Enable I2S Rx function to receive data */
  4.     I2S_ENABLE_RX(I2S0);

 楼主| heisexingqisi 发表于 2024-5-18 21:13 | 显示全部楼层
另外就是通过I2C接口对外部芯片的配置了。
  1. void NAU88L25_Setup(void)
  2. {
  3.     I2C_WriteNAU88L25(0x0003,  0x8053);
  4.     I2C_WriteNAU88L25(0x0004,  0x0001);
  5.     I2C_WriteNAU88L25(0x0005,  0x3126);
  6.     I2C_WriteNAU88L25(0x0006,  0x0008);
  7.     I2C_WriteNAU88L25(0x0007,  0x0010);
  8.     I2C_WriteNAU88L25(0x0008,  0xC000);
  9.     I2C_WriteNAU88L25(0x0009,  0x6000);
  10.     I2C_WriteNAU88L25(0x000A,  0xF13C);
  11.     I2C_WriteNAU88L25(0x000C,  0x0048);
  12.     I2C_WriteNAU88L25(0x000D,  0x0000);
  13.     I2C_WriteNAU88L25(0x000F,  0x0000);
  14.     I2C_WriteNAU88L25(0x0010,  0x0000);
  15.     I2C_WriteNAU88L25(0x0011,  0x0000);
  16.     I2C_WriteNAU88L25(0x0012,  0xFFFF);
  17.     I2C_WriteNAU88L25(0x0013,  0x0015);
  18.     I2C_WriteNAU88L25(0x0014,  0x0110);
  19.     I2C_WriteNAU88L25(0x0015,  0x0000);
  20.     I2C_WriteNAU88L25(0x0016,  0x0000);
  21.     I2C_WriteNAU88L25(0x0017,  0x0000);
  22.     I2C_WriteNAU88L25(0x0018,  0x0000);
  23.     I2C_WriteNAU88L25(0x0019,  0x0000);
  24.     I2C_WriteNAU88L25(0x001A,  0x0000);
  25.     I2C_WriteNAU88L25(0x001B,  0x0000);
  26.     I2C_WriteNAU88L25(0x001C,  0x0002);
  27.     I2C_WriteNAU88L25(0x001D,  0x301a);   //301A:Master, BCLK_DIV=12.288M/8=1.536M, LRC_DIV=1.536M/32=48K
  28.     I2C_WriteNAU88L25(0x001E,  0x0000);
  29.     I2C_WriteNAU88L25(0x001F,  0x0000);
  30.     I2C_WriteNAU88L25(0x0020,  0x0000);
  31.     I2C_WriteNAU88L25(0x0021,  0x0000);
  32.     I2C_WriteNAU88L25(0x0022,  0x0000);
  33.     I2C_WriteNAU88L25(0x0023,  0x0000);
  34.     I2C_WriteNAU88L25(0x0024,  0x0000);
  35.     I2C_WriteNAU88L25(0x0025,  0x0000);
  36.     I2C_WriteNAU88L25(0x0026,  0x0000);
  37.     I2C_WriteNAU88L25(0x0027,  0x0000);
  38.     I2C_WriteNAU88L25(0x0028,  0x0000);
  39.     I2C_WriteNAU88L25(0x0029,  0x0000);
  40.     I2C_WriteNAU88L25(0x002A,  0x0000);
  41.     I2C_WriteNAU88L25(0x002B,  0x0012);
  42.     I2C_WriteNAU88L25(0x002C,  0x0082);
  43.     I2C_WriteNAU88L25(0x002D,  0x0000);
  44.     I2C_WriteNAU88L25(0x0030,  0x00CF);
  45.     I2C_WriteNAU88L25(0x0031,  0x0000);
  46.     I2C_WriteNAU88L25(0x0032,  0x0000);
  47.     I2C_WriteNAU88L25(0x0033,  0x009E);
  48.     I2C_WriteNAU88L25(0x0034,  0x029E);
  49.     I2C_WriteNAU88L25(0x0038,  0x1486);
  50.     I2C_WriteNAU88L25(0x0039,  0x0F12);
  51.     I2C_WriteNAU88L25(0x003A,  0x25FF);
  52.     I2C_WriteNAU88L25(0x003B,  0x3457);
  53.     I2C_WriteNAU88L25(0x0045,  0x1486);
  54.     I2C_WriteNAU88L25(0x0046,  0x0F12);
  55.     I2C_WriteNAU88L25(0x0047,  0x25F9);
  56.     I2C_WriteNAU88L25(0x0048,  0x3457);
  57.     I2C_WriteNAU88L25(0x004C,  0x0000);
  58.     I2C_WriteNAU88L25(0x004D,  0x0000);
  59.     I2C_WriteNAU88L25(0x004E,  0x0000);
  60.     I2C_WriteNAU88L25(0x0050,  0x2007);
  61.     I2C_WriteNAU88L25(0x0051,  0x0000);
  62.     I2C_WriteNAU88L25(0x0053,  0xC201);
  63.     I2C_WriteNAU88L25(0x0054,  0x0C95);
  64.     I2C_WriteNAU88L25(0x0055,  0x0000);
  65.     I2C_WriteNAU88L25(0x0058,  0x1A14);
  66.     I2C_WriteNAU88L25(0x0059,  0x00FF);
  67.     I2C_WriteNAU88L25(0x0066,  0x0060);
  68.     I2C_WriteNAU88L25(0x0068,  0xC300);
  69.     I2C_WriteNAU88L25(0x0069,  0x0000);
  70.     I2C_WriteNAU88L25(0x006A,  0x0083);
  71.     I2C_WriteNAU88L25(0x0071,  0x0011);
  72.     I2C_WriteNAU88L25(0x0072,  0x0260);
  73.     I2C_WriteNAU88L25(0x0073,  0x332C);
  74.     I2C_WriteNAU88L25(0x0074,  0x4502);
  75.     I2C_WriteNAU88L25(0x0076,  0x3140);
  76.     I2C_WriteNAU88L25(0x0077,  0x0000);
  77.     I2C_WriteNAU88L25(0x007F,  0x553F);
  78.     I2C_WriteNAU88L25(0x0080,  0x0420);
  79.     I2C_WriteNAU88L25(0x0001,  0x07D4);

  80.     printf("NAU88L25 Configured done.\n");
  81. }
 楼主| heisexingqisi 发表于 2024-5-18 21:14 | 显示全部楼层
另外也提供了对该芯片的复位功能。
  1. void NAU88L25_Reset(void)
  2. {
  3.     I2C_WriteNAU88L25(0,  0x1);
  4.     I2C_WriteNAU88L25(0,  0);   // Reset all registers
  5.     CLK_SysTickDelay(10000);

  6.     printf("NAU88L25 Software Reset.\n");
  7. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

157

主题

2767

帖子

2

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

157

主题

2767

帖子

2

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