牛卧堂MCU技术交流

标题: NUC029SGE 芯片與帶有 PDMA SPI 的 ws2812 一起使用 [打印本页]

作者: admin    时间: 2022-10-19 17:04
标题: NUC029SGE 芯片與帶有 PDMA SPI 的 ws2812 一起使用
你好,我叫natee。我是泰國人。我在清邁工作。現在我正在學習使用 NUC029SGE 芯片與帶有 PDMA SPI 的 ws2812 一起使用 http://www.nuvoton-mcu.com/forum ... mp;highlight=ws2812

即使在修復錯誤之後它也不起作用,我嘗試了鏈接中的示例。

https://m.blog.naver.com/PostVie ... ;logNo=221544870211

使用 SPI FIFO Master 不再起作用。

我正在嘗試訂閱論壇尋求幫助。 http://www.nuvoton-mcu.com/forum已經用郵箱註冊了[url=mailtoitipong@narit.or.th]Pitipong@narit.or.th[/url]我沒有收到系統的回應,而且確認不是機器人的身份使用了漢字,漢字,讓我無法使用。我真的需要管理員的幫助,我想使用 nuvoton 芯片,它工作正常,請管理員幫助我。我覺得新唐芯片在泰國市場有很大的前途,5-6年前,新唐芯片和ST或者NXP價格相差不大,但是現在價格差距很大。我想做新唐芯片,也想賣給泰國人用。

謝謝你

我試圖實現的代碼 spi fifo

  1. /**************************************************************************//**
  2. * @file     main.c
  3. * @version  V3.0
  4. * $Revision: 3 $
  5. * $Date: 17/05/04 1:53p $
  6. * @brief    Configure SPI0 as Master mode and demonstrate how to communicate
  7. *           with an off-chip SPI Slave device with FIFO mode. This sample
  8. *           code needs to work with SPI_SlaveFifoMode sample code.
  9. *
  10. * @note
  11. * Copyright (C) 2016 Nuvoton Technology Corp. All rights reserved.
  12. *
  13. ******************************************************************************/
  14. #include <stdio.h>
  15. #include "NUC029xGE.h"


  16. #define MAX_LED_COUNT 50

  17. uint8_t leds[MAX_LED_COUNT][3] = {{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},};

  18. uint8_t ledCount=0;

  19. uint8_t ledTotalCount=0;

  20. uint8_t colorCount=0;

  21. const uint32_t colorLookup[] = {
  22.   0x924924, 0x924926, 0x924934, 0x924936, 0x9249A4, 0x9249A6, 0x9249B4, 0x9249B6, 0x924D24, 0x924D26, 0x924D34, 0x924D36, 0x924DA4, 0x924DA6, 0x924DB4, 0x924DB6,
  23.   0x926924, 0x926926, 0x926934, 0x926936, 0x9269A4, 0x9269A6, 0x9269B4, 0x9269B6, 0x926D24, 0x926D26, 0x926D34, 0x926D36, 0x926DA4, 0x926DA6, 0x926DB4, 0x926DB6,
  24.   0x934924, 0x934926, 0x934934, 0x934936, 0x9349A4, 0x9349A6, 0x9349B4, 0x9349B6, 0x934D24, 0x934D26, 0x934D34, 0x934D36, 0x934DA4, 0x934DA6, 0x934DB4, 0x934DB6,
  25.   0x936924, 0x936926, 0x936934, 0x936936, 0x9369A4, 0x9369A6, 0x9369B4, 0x9369B6, 0x936D24, 0x936D26, 0x936D34, 0x936D36, 0x936DA4, 0x936DA6, 0x936DB4, 0x936DB6,
  26.   0x9A4924, 0x9A4926, 0x9A4934, 0x9A4936, 0x9A49A4, 0x9A49A6, 0x9A49B4, 0x9A49B6, 0x9A4D24, 0x9A4D26, 0x9A4D34, 0x9A4D36, 0x9A4DA4, 0x9A4DA6, 0x9A4DB4, 0x9A4DB6,
  27.   0x9A6924, 0x9A6926, 0x9A6934, 0x9A6936, 0x9A69A4, 0x9A69A6, 0x9A69B4, 0x9A69B6, 0x9A6D24, 0x9A6D26, 0x9A6D34, 0x9A6D36, 0x9A6DA4, 0x9A6DA6, 0x9A6DB4, 0x9A6DB6,
  28.   0x9B4924, 0x9B4926, 0x9B4934, 0x9B4936, 0x9B49A4, 0x9B49A6, 0x9B49B4, 0x9B49B6, 0x9B4D24, 0x9B4D26, 0x9B4D34, 0x9B4D36, 0x9B4DA4, 0x9B4DA6, 0x9B4DB4, 0x9B4DB6,
  29.   0x9B6924, 0x9B6926, 0x9B6934, 0x9B6936, 0x9B69A4, 0x9B69A6, 0x9B69B4, 0x9B69B6, 0x9B6D24, 0x9B6D26, 0x9B6D34, 0x9B6D36, 0x9B6DA4, 0x9B6DA6, 0x9B6DB4, 0x9B6DB6,
  30.   0xD24924, 0xD24926, 0xD24934, 0xD24936, 0xD249A4, 0xD249A6, 0xD249B4, 0xD249B6, 0xD24D24, 0xD24D26, 0xD24D34, 0xD24D36, 0xD24DA4, 0xD24DA6, 0xD24DB4, 0xD24DB6,
  31.   0xD26924, 0xD26926, 0xD26934, 0xD26936, 0xD269A4, 0xD269A6, 0xD269B4, 0xD269B6, 0xD26D24, 0xD26D26, 0xD26D34, 0xD26D36, 0xD26DA4, 0xD26DA6, 0xD26DB4, 0xD26DB6,
  32.   0xD34924, 0xD34926, 0xD34934, 0xD34936, 0xD349A4, 0xD349A6, 0xD349B4, 0xD349B6, 0xD34D24, 0xD34D26, 0xD34D34, 0xD34D36, 0xD34DA4, 0xD34DA6, 0xD34DB4, 0xD34DB6,
  33.   0xD36924, 0xD36926, 0xD36934, 0xD36936, 0xD369A4, 0xD369A6, 0xD369B4, 0xD369B6, 0xD36D24, 0xD36D26, 0xD36D34, 0xD36D36, 0xD36DA4, 0xD36DA6, 0xD36DB4, 0xD36DB6,
  34.   0xDA4924, 0xDA4926, 0xDA4934, 0xDA4936, 0xDA49A4, 0xDA49A6, 0xDA49B4, 0xDA49B6, 0xDA4D24, 0xDA4D26, 0xDA4D34, 0xDA4D36, 0xDA4DA4, 0xDA4DA6, 0xDA4DB4, 0xDA4DB6,
  35.   0xDA6924, 0xDA6926, 0xDA6934, 0xDA6936, 0xDA69A4, 0xDA69A6, 0xDA69B4, 0xDA69B6, 0xDA6D24, 0xDA6D26, 0xDA6D34, 0xDA6D36, 0xDA6DA4, 0xDA6DA6, 0xDA6DB4, 0xDA6DB6,
  36.   0xDB4924, 0xDB4926, 0xDB4934, 0xDB4936, 0xDB49A4, 0xDB49A6, 0xDB49B4, 0xDB49B6, 0xDB4D24, 0xDB4D26, 0xDB4D34, 0xDB4D36, 0xDB4DA4, 0xDB4DA6, 0xDB4DB4, 0xDB4DB6,
  37.   0xDB6924, 0xDB6926, 0xDB6934, 0xDB6936, 0xDB69A4, 0xDB69A6, 0xDB69B4, 0xDB69B6, 0xDB6D24, 0xDB6D26, 0xDB6D34, 0xDB6D36, 0xDB6DA4, 0xDB6DA6, 0xDB6DB4, 0xDB6DB6,
  38. };

  39. void setTotalPixels(uint8_t total)
  40. {
  41.   if(total >= MAX_LED_COUNT)
  42.   {
  43.     ledTotalCount = MAX_LED_COUNT;
  44.   }
  45.   else
  46.   {
  47.     ledTotalCount = total;
  48.   }
  49. }


  50. void setPixel(uint8_t id, uint8_t r, uint8_t g, uint8_t b)
  51. {
  52.   if(id >= MAX_LED_COUNT){
  53.     return;}
  54.       
  55.       
  56.    leds[id][0] = r;
  57.    leds[id][1] = g;
  58.    leds[id][2] = b;
  59. }

  60. void getPixel(uint8_t id, uint8_t *r, uint8_t *g, uint8_t *b)
  61. {
  62.   if(id >= MAX_LED_COUNT){
  63.     return;}
  64.       
  65.       
  66.    *r = leds[id][0];
  67.    *g = leds[id][1];
  68.    *b = leds[id][2];
  69. }


  70. void showLED()
  71. {
  72.   ledCount=0;
  73.   colorCount=0;
  74.   SPI_EnableInt(SPI0, SPI_FIFOCTL_TXTHIEN_Msk);
  75. }



  76. /* Function prototype declaration */
  77. void SYS_Init(void);
  78. void SPI_Init(void);

  79. /* ------------- */
  80. /* Main function */
  81. /* ------------- */
  82. int main(void)
  83. {


  84.     /* Unlock protected registers */
  85.     SYS_UnlockReg();
  86.     /* Init System, IP clock and multi-function I/O. */
  87.     SYS_Init();
  88.     /* Lock protected registers */
  89.     SYS_LockReg();

  90.     /* Configure UART0: 115200, 8-bit word, no parity bit, 1 stop bit. */
  91.     UART_Open(UART0, 115200);
  92.       
  93.           SPI_Init();



  94.     printf("\n\n");
  95.     printf("+----------------------------------------------------------------------+\n");

  96.                
  97.                 setTotalPixels(8);
  98.                
  99.                  printf("\nt");


  100.     while(1){
  101.                        
  102.                
  103.                        
  104.                         setPixel(0,255,0,0);
  105.                         showLED();
  106.                        
  107.                         setPixel(1,255,0,0);
  108.                         showLED();
  109.                        
  110.                         setPixel(2,255,0,0);
  111.                         showLED();
  112.                        
  113.                         setPixel(3,255,0,0);
  114.                         showLED();
  115.                 }
  116. }

  117. void SYS_Init(void)
  118. {
  119.     /*---------------------------------------------------------------------------------------------------------*/
  120.     /* Init System Clock                                                                                       */
  121.     /*---------------------------------------------------------------------------------------------------------*/

  122.     /* Enable external 12MHz XTAL */
  123.     CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

  124.     /* Waiting for clock ready */
  125.     CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

  126.     /* Switch HCLK clock source to HXT and set HCLK divider to 1 */
  127.     CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HXT, CLK_CLKDIV0_HCLK(1));

  128.     /* Select HXT as the clock source of UART0 */
  129.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UARTSEL_HXT, CLK_CLKDIV0_UART(1));

  130.     /* Select PCLK0 as the clock source of SPI0 */
  131.     CLK_SetModuleClock(SPI0_MODULE, CLK_CLKSEL2_SPI0SEL_PCLK0, MODULE_NoMsk);

  132.     /* Enable UART peripheral clock */
  133.     CLK_EnableModuleClock(UART0_MODULE);
  134.     /* Enable SPI0 peripheral clock */
  135.     CLK_EnableModuleClock(SPI0_MODULE);

  136.     /* Update System Core Clock */
  137.     /* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CyclesPerUs automatically. */
  138.     SystemCoreClockUpdate();

  139.     /*---------------------------------------------------------------------------------------------------------*/
  140.     /* Init I/O Multi-function                                                                                 */
  141.     /*---------------------------------------------------------------------------------------------------------*/
  142.     /* Set multi-function pins for UART0 RXD and TXD */
  143.     SYS->GPA_MFPL &= ~(SYS_GPA_MFPL_PA2MFP_Msk | SYS_GPA_MFPL_PA3MFP_Msk);
  144.     SYS->GPA_MFPL |= (SYS_GPA_MFPL_PA3MFP_UART0_RXD | SYS_GPA_MFPL_PA2MFP_UART0_TXD);

  145.            
  146.           /* Setup SPI0 multi-function pins */
  147.     SYS->GPB_MFPL &= ~(SYS_GPB_MFPL_PB4MFP_Msk | SYS_GPB_MFPL_PB5MFP_Msk | SYS_GPB_MFPL_PB6MFP_Msk | SYS_GPB_MFPL_PB7MFP_Msk);
  148.     SYS->GPB_MFPL |= SYS_GPB_MFPL_PB4MFP_SPI0_SS | SYS_GPB_MFPL_PB5MFP_SPI0_MOSI | SYS_GPB_MFPL_PB6MFP_SPI0_MISO | SYS_GPB_MFPL_PB7MFP_SPI0_CLK;
  149.                
  150.                
  151. }

  152. void SPI_Init(void)
  153. {
  154.     /*---------------------------------------------------------------------------------------------------------*/
  155.     /* Init SPI                                                                                                */
  156.     /*---------------------------------------------------------------------------------------------------------*/

  157.       
  158.      printf("\ns");
  159.     SPI_Open(SPI0, SPI_MASTER, SPI_MODE_0, 24, 2400000);
  160.    
  161.          
  162.                 SPI_EnableAutoSS(SPI0, SPI_SS, SPI_SS_ACTIVE_HIGH);

  163.                 SPI_SetFIFO(SPI0, 3, 2);

  164.     NVIC_EnableIRQ(SPI0_IRQn);

  165.    
  166. }

  167. void SPI0_IRQHandler(void)
  168. {

  169.     /* Check TX FULL flag and TX data count */
  170.       
  171.             printf("\np");
  172.     if((SPI_GET_TX_FIFO_FULL_FLAG(SPI0) == 0) && (ledCount  < ledTotalCount))
  173.     {
  174.         /* Write to TX FIFO */
  175.         SPI_WRITE_TX(SPI0,  colorLookup[leds[ledCount][colorCount++]]);
  176.                         printf("\nx");
  177.                        
  178.                                  if(colorCount >= 3)
  179.                                         {
  180.                                                 //ledCount ??         
  181.                                                 ledCount++;
  182.                                                 //led ?? ??? ? ???
  183.                                                 colorCount=0;
  184.                                         }
  185.     }else{
  186.                         ledCount=0;
  187.       colorCount=0;
  188.                        
  189.                         SPI_DisableInt(SPI0, SPI_FIFOCTL_TXTHIEN_Msk); /* Disable TX FIFO threshold interrupt */

  190.                
  191.                 }

  192. }
复制代码


作者: admin    时间: 2022-10-19 17:15
@natee.th
作者: admin    时间: 2022-10-20 10:39
程序没有发出SPI数据是因为SPI TX FIFO阈值中断使能写错了。
enable和disable如下:SPI_EnableInt(SPI0, SPI_FIFO_TXTH_INT_MASK);  SPI_DisableInt(SPI0, SPI_FIFO_TXTH_INT_MASK);     
SPI_MasterFifoMode例程也无输出是同样的问题,您去官网上下载最新版本的BSP即可。
https://www.nuvoton.com.cn/produ ... roup=Software&tab=2



作者: admin    时间: 2022-10-21 10:54
現在可以用了謝謝

  1. #include <stdio.h>
  2. #include "NUC029xGE.h"
  3. #include <math.h>

  4. #define PI 3.14159265
  5. #define MAX_LED_COUNT 50



  6. uint8_t leds[MAX_LED_COUNT][3] = {{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},
  7.                                                                                                                                         {0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},
  8.                                                                                                                                         {0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},
  9.                                                                                                                                         {0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},
  10.                                                                                                                                         {0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00}};

  11.                                                                                                                                                
  12.                                                                                                                                                
  13. uint8_t ledsB[MAX_LED_COUNT][3] = {{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},
  14.                                                                                                                                         {0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},
  15.                                                                                                                                         {0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},
  16.                                                                                                                                         {0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},
  17.                                                                                                                                         {0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00},{0x00, 0x00, 0x00}};

  18. uint8_t ledCount=0;

  19. uint8_t ledTotalCount=0;

  20. uint8_t colorCount=0;
  21.                                                                                                                                                
  22. uint8_t Darkness=200;

  23. uint8_t i= 0;

  24. const uint32_t colorLookup[] = {
  25.   0x924924, 0x924926, 0x924934, 0x924936, 0x9249A4, 0x9249A6, 0x9249B4, 0x9249B6, 0x924D24, 0x924D26, 0x924D34, 0x924D36, 0x924DA4, 0x924DA6, 0x924DB4, 0x924DB6,
  26.   0x926924, 0x926926, 0x926934, 0x926936, 0x9269A4, 0x9269A6, 0x9269B4, 0x9269B6, 0x926D24, 0x926D26, 0x926D34, 0x926D36, 0x926DA4, 0x926DA6, 0x926DB4, 0x926DB6,
  27.   0x934924, 0x934926, 0x934934, 0x934936, 0x9349A4, 0x9349A6, 0x9349B4, 0x9349B6, 0x934D24, 0x934D26, 0x934D34, 0x934D36, 0x934DA4, 0x934DA6, 0x934DB4, 0x934DB6,
  28.   0x936924, 0x936926, 0x936934, 0x936936, 0x9369A4, 0x9369A6, 0x9369B4, 0x9369B6, 0x936D24, 0x936D26, 0x936D34, 0x936D36, 0x936DA4, 0x936DA6, 0x936DB4, 0x936DB6,
  29.   0x9A4924, 0x9A4926, 0x9A4934, 0x9A4936, 0x9A49A4, 0x9A49A6, 0x9A49B4, 0x9A49B6, 0x9A4D24, 0x9A4D26, 0x9A4D34, 0x9A4D36, 0x9A4DA4, 0x9A4DA6, 0x9A4DB4, 0x9A4DB6,
  30.   0x9A6924, 0x9A6926, 0x9A6934, 0x9A6936, 0x9A69A4, 0x9A69A6, 0x9A69B4, 0x9A69B6, 0x9A6D24, 0x9A6D26, 0x9A6D34, 0x9A6D36, 0x9A6DA4, 0x9A6DA6, 0x9A6DB4, 0x9A6DB6,
  31.   0x9B4924, 0x9B4926, 0x9B4934, 0x9B4936, 0x9B49A4, 0x9B49A6, 0x9B49B4, 0x9B49B6, 0x9B4D24, 0x9B4D26, 0x9B4D34, 0x9B4D36, 0x9B4DA4, 0x9B4DA6, 0x9B4DB4, 0x9B4DB6,
  32.   0x9B6924, 0x9B6926, 0x9B6934, 0x9B6936, 0x9B69A4, 0x9B69A6, 0x9B69B4, 0x9B69B6, 0x9B6D24, 0x9B6D26, 0x9B6D34, 0x9B6D36, 0x9B6DA4, 0x9B6DA6, 0x9B6DB4, 0x9B6DB6,
  33.   0xD24924, 0xD24926, 0xD24934, 0xD24936, 0xD249A4, 0xD249A6, 0xD249B4, 0xD249B6, 0xD24D24, 0xD24D26, 0xD24D34, 0xD24D36, 0xD24DA4, 0xD24DA6, 0xD24DB4, 0xD24DB6,
  34.   0xD26924, 0xD26926, 0xD26934, 0xD26936, 0xD269A4, 0xD269A6, 0xD269B4, 0xD269B6, 0xD26D24, 0xD26D26, 0xD26D34, 0xD26D36, 0xD26DA4, 0xD26DA6, 0xD26DB4, 0xD26DB6,
  35.   0xD34924, 0xD34926, 0xD34934, 0xD34936, 0xD349A4, 0xD349A6, 0xD349B4, 0xD349B6, 0xD34D24, 0xD34D26, 0xD34D34, 0xD34D36, 0xD34DA4, 0xD34DA6, 0xD34DB4, 0xD34DB6,
  36.   0xD36924, 0xD36926, 0xD36934, 0xD36936, 0xD369A4, 0xD369A6, 0xD369B4, 0xD369B6, 0xD36D24, 0xD36D26, 0xD36D34, 0xD36D36, 0xD36DA4, 0xD36DA6, 0xD36DB4, 0xD36DB6,
  37.   0xDA4924, 0xDA4926, 0xDA4934, 0xDA4936, 0xDA49A4, 0xDA49A6, 0xDA49B4, 0xDA49B6, 0xDA4D24, 0xDA4D26, 0xDA4D34, 0xDA4D36, 0xDA4DA4, 0xDA4DA6, 0xDA4DB4, 0xDA4DB6,
  38.   0xDA6924, 0xDA6926, 0xDA6934, 0xDA6936, 0xDA69A4, 0xDA69A6, 0xDA69B4, 0xDA69B6, 0xDA6D24, 0xDA6D26, 0xDA6D34, 0xDA6D36, 0xDA6DA4, 0xDA6DA6, 0xDA6DB4, 0xDA6DB6,
  39.   0xDB4924, 0xDB4926, 0xDB4934, 0xDB4936, 0xDB49A4, 0xDB49A6, 0xDB49B4, 0xDB49B6, 0xDB4D24, 0xDB4D26, 0xDB4D34, 0xDB4D36, 0xDB4DA4, 0xDB4DA6, 0xDB4DB4, 0xDB4DB6,
  40.   0xDB6924, 0xDB6926, 0xDB6934, 0xDB6936, 0xDB69A4, 0xDB69A6, 0xDB69B4, 0xDB69B6, 0xDB6D24, 0xDB6D26, 0xDB6D34, 0xDB6D36, 0xDB6DA4, 0xDB6DA6, 0xDB6DB4, 0xDB6DB6,
  41. };



  42. void setTotalPixels(uint8_t total)
  43. {
  44.   if(total >= MAX_LED_COUNT)
  45.   {
  46.     ledTotalCount = MAX_LED_COUNT;
  47.   }
  48.   else
  49.   {
  50.     ledTotalCount = total;
  51.   }
  52. }


  53. void setPixel(uint8_t id, uint8_t r, uint8_t g, uint8_t b)
  54. {
  55.   if(id >= MAX_LED_COUNT){return;}
  56.       
  57.       
  58.          leds[id][0] = g;
  59.    leds[id][1] = r;
  60.    leds[id][2] = b;
  61. }

  62. void update_Brightness(){
  63.       
  64.         for(i=0; i<ledTotalCount; i++){
  65.                                 ledsB[0] = leds[0];
  66.                                 ledsB[1] = leds[1];
  67.                                 ledsB[2] = leds[2];
  68.                
  69.                
  70.                
  71.                
  72.                 uint16_t i = 0;
  73.         uint16_t j = 0;
  74.       
  75.         /*   next step
  76.         if (brightness > 45) brightness = 45;
  77.         for (i=0; i<MAX_LED; i++)
  78.         {
  79.                 LED_Mod[0] = LED_Data[0];
  80.                 for (j=1; j<4; j++)
  81.                 {
  82.                         float angle = 90-brightness;  // in degrees
  83.                         angle = angle*PI / 180;  // in rad
  84.                         LED_Mod[j] = (LED_Data[j])/(tan(angle));
  85.                 }
  86.         }*/
  87.       
  88.       
  89.         }

  90. }

  91. void getPixel(uint8_t id, uint8_t *r, uint8_t *g, uint8_t *b)
  92. {
  93.   if(id >= MAX_LED_COUNT){return;}
  94.       
  95.       
  96.    *r = leds[id][0];
  97.    *g = leds[id][1];
  98.    *b = leds[id][2];
  99. }


  100. void showLED()
  101. {
  102.   ledCount=0;
  103.         colorCount=0;
  104.   SPI_EnableInt(SPI0, SPI_FIFO_TXTH_INT_MASK);
  105. }



  106. /* Function prototype declaration */
  107. void SYS_Init(void);
  108. void SPI_Init(void);

  109. /* ------------- */
  110. /* Main function */
  111. /* ------------- */
  112. int main(void)
  113. {


  114.     /* Unlock protected registers */
  115.     SYS_UnlockReg();
  116.     /* Init System, IP clock and multi-function I/O. */
  117.     SYS_Init();
  118.     /* Lock protected registers */
  119.     SYS_LockReg();

  120.     /* Configure UART0: 115200, 8-bit word, no parity bit, 1 stop bit. */
  121.     UART_Open(UART0, 115200);
  122.       
  123.           SPI_Init();



  124.     printf("\n\n");
  125.     printf("setTotalPixels\n");
  126.     setTotalPixels(5);
  127.                
  128.                 setPixel(0,255,0,0);
  129.                 setPixel(1,0,255,0);
  130.                 setPixel(2,0,0,255);
  131.                 setPixel(3,0,255,0);
  132.                 setPixel(4,255,0,0);
  133.                         //showLED();

  134.     while(1){
  135.                 printf("\n\nPress any key to start sending.\n");
  136.     getchar();      
  137.                 update_Brightness();
  138.                 showLED();
  139.                 printf("\n End.\n");
  140.                        

  141.                        
  142.                        
  143.                 }
  144. }

  145. void SYS_Init(void)
  146. {
  147.     /*---------------------------------------------------------------------------------------------------------*/
  148.     /* Init System Clock                                                                                       */
  149.     /*---------------------------------------------------------------------------------------------------------*/

  150.     /* Enable external 12MHz XTAL */
  151.     CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

  152.     /* Waiting for clock ready */
  153.     CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

  154.     /* Switch HCLK clock source to HXT and set HCLK divider to 1 */
  155.     CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HXT, CLK_CLKDIV0_HCLK(1));

  156.     /* Select HXT as the clock source of UART0 */
  157.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UARTSEL_HXT, CLK_CLKDIV0_UART(1));

  158.     /* Select PCLK0 as the clock source of SPI0 */
  159.     CLK_SetModuleClock(SPI0_MODULE, CLK_CLKSEL2_SPI0SEL_PCLK0, MODULE_NoMsk);

  160.     /* Enable UART peripheral clock */
  161.     CLK_EnableModuleClock(UART0_MODULE);
  162.     /* Enable SPI0 peripheral clock */
  163.     CLK_EnableModuleClock(SPI0_MODULE);

  164.     /* Update System Core Clock */
  165.     /* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CyclesPerUs automatically. */
  166.     SystemCoreClockUpdate();

  167.     /*---------------------------------------------------------------------------------------------------------*/
  168.     /* Init I/O Multi-function                                                                                 */
  169.     /*---------------------------------------------------------------------------------------------------------*/
  170.     /* Set multi-function pins for UART0 RXD and TXD */
  171.     SYS->GPA_MFPL &= ~(SYS_GPA_MFPL_PA2MFP_Msk | SYS_GPA_MFPL_PA3MFP_Msk);
  172.     SYS->GPA_MFPL |= (SYS_GPA_MFPL_PA3MFP_UART0_RXD | SYS_GPA_MFPL_PA2MFP_UART0_TXD);

  173.            
  174.           /* Setup SPI0 multi-function pins */
  175.     SYS->GPB_MFPL &= ~(SYS_GPB_MFPL_PB4MFP_Msk | SYS_GPB_MFPL_PB5MFP_Msk | SYS_GPB_MFPL_PB6MFP_Msk | SYS_GPB_MFPL_PB7MFP_Msk);
  176.     SYS->GPB_MFPL |= SYS_GPB_MFPL_PB4MFP_SPI0_SS | SYS_GPB_MFPL_PB5MFP_SPI0_MOSI | SYS_GPB_MFPL_PB6MFP_SPI0_MISO | SYS_GPB_MFPL_PB7MFP_SPI0_CLK;


  177.                
  178.                
  179. }

  180. void SPI_Init(void)
  181. {
  182.     /*---------------------------------------------------------------------------------------------------------*/
  183.     /* Init SPI                                                                                                */
  184.     /*---------------------------------------------------------------------------------------------------------*/


  185.     SPI_Open(SPI0, SPI_MASTER, SPI_MODE_0, 24 , 2400000);
  186.    
  187.          
  188.                 SPI_EnableAutoSS(SPI0, SPI_SS, SPI_SS_ACTIVE_HIGH);

  189.     NVIC_EnableIRQ(SPI0_IRQn);

  190.    
  191. }

  192. void SPI0_IRQHandler(void)
  193. {

  194.     /* Check TX FULL flag and TX data count */
  195.       
  196.     if((SPI_GET_TX_FIFO_FULL_FLAG(SPI0) == 0) && (ledCount  < ledTotalCount))
  197.     {
  198.         /* Write to TX FIFO */
  199.                        
  200.                          SPI_WRITE_TX(SPI0, colorLookup[ledsB[ledCount][colorCount++]]);
  201.                        
  202.                         if(colorCount >= 3){
  203.                                 ledCount++;
  204.         colorCount=0;
  205.      }
  206.       
  207.                        
  208.     }else{
  209.                         ledCount=0;
  210.                         colorCount=0;                       
  211.                         SPI_DisableInt(SPI0, SPI_FIFO_TXTH_INT_MASK); /* Disable TX FIFO threshold interrupt */

  212.                
  213.                 }

  214. }
复制代码







欢迎光临 牛卧堂MCU技术交流 (http://nuvoton-mcu.com/) Powered by Discuz! X3.2