[DemoCode下载] M451的GPIO操作相关库函数

[复制链接]
5316|19
 楼主| 稳稳の幸福 发表于 2015-4-3 11:47 | 显示全部楼层 |阅读模式
  1. <div class="blockcode"><blockquote>/**************************************************************************//**
  2. * [url=home.php?mod=space&uid=288409]@file[/url]     gpio.c
  3. * [url=home.php?mod=space&uid=895143]@version[/url]  V3.00
  4. * $Revision: 4 $
  5. * $Date: 14/10/16 5:40p $
  6. * [url=home.php?mod=space&uid=247401]@brief[/url]    M451 series GPIO driver source file
  7. *
  8. * @note
  9. * Copyright (C) 2014 Nuvoton Technology Corp. All rights reserved.
  10. *****************************************************************************/

  11. #include "M451Series.h"

  12. /** @addtogroup M451_Device_Driver M451 Device Driver
  13.   @{
  14. */

  15. /** @addtogroup M451_GPIO_Driver GPIO Driver
  16.   @{
  17. */

  18. /** @addtogroup M451_GPIO_EXPORTED_FUNCTIONS GPIO Exported Functions
  19.   @{
  20. */

  21. /**
  22. * @brief       Set GPIO operation mode
  23. *
  24. * @param[in]   port        GPIO port. It could be PA, PB, PC, PD, PE or PF.
  25. * @param[in]   u32PinMask  The single or multiple pins of specified GPIO port.
  26. *                          It could be BIT0 ~ BIT15 for PA, PB, PC and PD GPIO port.
  27. *                          It could be BIT0 ~ BIT14 for PE GPIO port.
  28. *                          It could be BIT0 ~ BIT7 for PF GPIO port.
  29. * @param[in]   u32Mode     Operation mode.  It could be \n
  30. *                          GPIO_MODE_INPUT, GPIO_MODE_OUTPUT, GPIO_MODE_OPEN_DRAIN, GPIO_MODE_QUASI.
  31. *
  32. * [url=home.php?mod=space&uid=266161]@return[/url]      None
  33. *
  34. * @details     This function is used to set specified GPIO operation mode.
  35. */
  36. void GPIO_SetMode(GPIO_T *port, uint32_t u32PinMask, uint32_t u32Mode)
  37. {
  38.     uint32_t i;

  39.     for(i = 0; i < GPIO_PIN_MAX; i++)
  40.     {
  41.         if(u32PinMask & (1 << i))
  42.         {
  43.             port->MODE = (port->MODE & ~(0x3 << (i << 1))) | (u32Mode << (i << 1));
  44.         }
  45.     }
  46. }

  47. /**
  48. * @brief       Enable GPIO interrupt
  49. *
  50. * @param[in]   port            GPIO port. It could be PA, PB, PC, PD, PE or PF.
  51. * @param[in]   u32Pin          The pin of specified GPIO port.
  52. *                              It could be 0 ~ 15 for PA, PB, PC and PD GPIO port.
  53. *                              It could be 0 ~ 14 for PE GPIO port.
  54. *                              It could be 0 ~ 7 for PF GPIO port.
  55. * @param[in]   u32IntAttribs   The interrupt attribute of specified GPIO pin. It could be \n
  56. *                              GPIO_INT_RISING, GPIO_INT_FALLING, GPIO_INT_BOTH_EDGE, GPIO_INT_HIGH, GPIO_INT_LOW.
  57. *
  58. * @return      None
  59. *
  60. * @details     This function is used to enable specified GPIO pin interrupt.
  61. */
  62. void GPIO_EnableInt(GPIO_T *port, uint32_t u32Pin, uint32_t u32IntAttribs)
  63. {
  64.     port->INTTYPE |= (((u32IntAttribs >> 24) & 0xFFUL) << u32Pin);
  65.     port->INTEN |= ((u32IntAttribs & 0xFFFFFFUL) << u32Pin);
  66. }


  67. /**
  68. * @brief       Disable GPIO interrupt
  69. *
  70. * @param[in]   port        GPIO port. It could be PA, PB, PC, PD, PE or PF.
  71. * @param[in]   u32Pin      The pin of specified GPIO port.
  72. *                          It could be 0 ~ 15 for PA, PB, PC and PD GPIO port.
  73. *                          It could be 0 ~ 14 for PE GPIO port.
  74. *                          It could be 0 ~ 7 for PF GPIO port.
  75. *
  76. * @return      None
  77. *
  78. * @details     This function is used to enable specified GPIO pin interrupt.
  79. */
  80. void GPIO_DisableInt(GPIO_T *port, uint32_t u32Pin)
  81. {
  82.     port->INTTYPE &= ~(1UL << u32Pin);
  83.     port->INTEN &= ~((0x00010001UL) << u32Pin);
  84. }


  85. /*@}*/ /* end of group M451_GPIO_EXPORTED_FUNCTIONS */

  86. /*@}*/ /* end of group M451_GPIO_Driver */

  87. /*@}*/ /* end of group M451_Device_Driver */

  88. /*** (C) COPYRIGHT 2014 Nuvoton Technology Corp. ***/

 楼主| 稳稳の幸福 发表于 2015-4-3 12:45 | 显示全部楼层
看了看这个。c里面没有操作IO的,都是中断相关的。
 楼主| 稳稳の幸福 发表于 2015-4-3 12:47 | 显示全部楼层
没有看懂那个GPIO_DisableEINT    GPIO_DisableInt
这个是什么意思?关闭GPIO中断源吗?
 楼主| 稳稳の幸福 发表于 2015-4-3 12:50 | 显示全部楼层
/**
* @brief       Set GPIO Port OUT Data
*
* @param[in]   port        GPIO port. It could be PA, PB, PC, PD, PE or PF.
* @param[in]   u32Data     GPIO port data.
*
* @return      None
*
* @details     Set the Data into specified GPIO port.
*/
#define GPIO_SET_OUT_DATA(port, u32Data)    ((port)->DOUT = (u32Data))
 楼主| 稳稳の幸福 发表于 2015-4-3 12:50 | 显示全部楼层
上面的这个设置输出数据,一共两个参量,port我知道,指的是端口。
 楼主| 稳稳の幸福 发表于 2015-4-3 12:51 | 显示全部楼层
可以是PA,PB,PC等,那么GPIO port data,到底是什么呢,根据定义,好像是个32位的数据,不知道可以是什么,也没有给的例子,我一会儿去例程看看。
 楼主| 稳稳の幸福 发表于 2015-4-4 20:43 来自手机 | 显示全部楼层
这种库函数总是喜欢用指针概念
598330983 发表于 2015-4-5 10:43 来自手机 | 显示全部楼层
楼主说的基本操作在头文件里面
mintspring 发表于 2015-4-5 21:02 | 显示全部楼层
这个好多在.h头文件就搞定了,只有复杂的才在对应.c做。
734774645 发表于 2017-2-19 18:06 | 显示全部楼层
不知道GPIO有没有时钟的配置。
734774645 发表于 2017-2-19 18:13 | 显示全部楼层
不好意思,不是通过一个IO的时钟配置,那个是STM32的,新唐的应该是直接使用的某个时钟系统的
598330983 发表于 2017-2-19 19:23 | 显示全部楼层
  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. * $Date: 15/09/02 10:03a $
  5. * [url=home.php?mod=space&uid=247401]@brief[/url]    Toggle PC.9 to turn on / off the board LED
  6. *
  7. * @note
  8. * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved.
  9. *
  10. ******************************************************************************/
  11. #include <stdio.h>
  12. #include "M451Series.h"

  13. #define HCLK_CLOCK       72000000


  14. void SYS_Init(void)
  15. {
  16.     /*---------------------------------------------------------------------------------------------------------*/
  17.     /* Init System Clock                                                                                       */
  18.     /*---------------------------------------------------------------------------------------------------------*/
  19.     /* Unlock protected registers */
  20.     SYS_UnlockReg();

  21.     /* Enable HIRC clock (Internal RC 22.1184MHz) */
  22.     CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);

  23.     /* Wait for HIRC clock ready */
  24.     CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);

  25.     /* Select HCLK clock source as HIRC and and HCLK clock divider as 1 */
  26.     CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1));

  27.     /* Enable HXT clock (external XTAL 12MHz) */
  28.     CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

  29.     /* Wait for HXT clock ready */
  30.     CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

  31.     /* Set core clock as HCLK_CLOCK */
  32.     CLK_SetCoreClock(HCLK_CLOCK);

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

  36.     /*---------------------------------------------------------------------------------------------------------*/
  37.     /* Init I/O Multi-function                                                                                 */
  38.     /*---------------------------------------------------------------------------------------------------------*/
  39.     /* Set GPD multi-function pins for UART0 RXD and TXD */
  40.     SYS->GPD_MFPL &= ~(SYS_GPD_MFPL_PD6MFP_Msk | SYS_GPD_MFPL_PD1MFP_Msk);
  41.     SYS->GPD_MFPL |= (SYS_GPD_MFPL_PD6MFP_UART0_RXD | SYS_GPD_MFPL_PD1MFP_UART0_TXD);

  42.     /* Lock protected registers */
  43.     SYS_LockReg();
  44. }


  45. /*---------------------------------------------------------------------------------------------------------*/
  46. /* MAIN function                                                                                           */
  47. /*---------------------------------------------------------------------------------------------------------*/
  48. int main(void)
  49. {
  50.     /* Init System, IP clock and multi-function I/O
  51.        In the end of SYS_Init() will issue SYS_LockReg()
  52.        to lock protected register. If user want to write
  53.        protected register, please issue SYS_UnlockReg()
  54.        to unlock protected register if necessary */
  55.     SYS_Init();

  56.     /* Select SysTick clock source as HXT */
  57.     CLK_SetSysTickClockSrc(CLK_CLKSEL0_STCLKSEL_HXT);

  58.     /* Configure PC.9 as Output mode */
  59.     GPIO_SetMode(PC, BIT9, GPIO_MODE_OUTPUT);

  60.     while(1)
  61.     {
  62.         /* Configure PC.9 to low */
  63.         PC9 = 0;
  64.         /* Delay 200 ms */
  65.         CLK_SysTickDelay(200000);

  66.         /* Configure PC.9 to high */
  67.         PC9 = 1;
  68.         /* Delay 200 ms */
  69.         CLK_SysTickDelay(200000);
  70.     }

  71. }

598330983 发表于 2017-2-19 19:23 | 显示全部楼层
  1. /**************************************************************************//**
  2. * @file     main.c
  3. * @version  V1.00
  4. * $Revision: 2 $
  5. * $Date: 15/09/02 10:03a $
  6. * @brief    Display an image on TFT LCD panel via SPI interface and control LED.
  7. *
  8. * @note
  9. * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved.
  10. *
  11. ******************************************************************************/
  12. #include <stdio.h>
  13. #include "M451Series.h"

  14. #define ILI9341_RESET   PB15
  15. #define ILI9341_DC      PB11
  16. #define ILI9341_LED     PB5

  17. #define LED1            PC3
  18. #define LED2            PC2
  19. #define LED3            PB1
  20. #define LED4            PC7

  21. #define LED_R           PC9
  22. #define LED_G           PC10
  23. #define LED_B           PC11


  24. extern uint8_t u8Image[153600];
  25. extern uint8_t Font8x16[];

  26. #define        White           0xFFFF
  27. #define Black           0x0000
  28. #define Blue            0x001F
  29. #define Blue2           0x051F
  30. #define Red             0xF800
  31. #define Magenta         0xF81F
  32. #define Green           0x07E0
  33. #define Cyan            0x7FFF
  34. #define Yellow          0xFFE0

  35. uint8_t LCD_ReadReg(uint8_t u8Comm)
  36. {
  37.     SPI_ClearRxFIFO(SPI2);

  38.     ILI9341_DC = 0;

  39.     SPI_WRITE_TX(SPI2, u8Comm);
  40.     SPI_WRITE_TX(SPI2, 0x00);

  41.     // wait tx finish
  42.     while(SPI_IS_BUSY(SPI2));

  43.     SPI_READ_RX(SPI2);

  44.     return (SPI_READ_RX(SPI2));
  45. }

  46. void LCD_WriteCommand(uint8_t u8Comm)
  47. {
  48.     ILI9341_DC = 0;

  49.     SPI_WRITE_TX(SPI2, u8Comm);

  50.     // wait tx finish
  51.     while(SPI_IS_BUSY(SPI2));
  52. }

  53. void LCD_WriteData(uint8_t u8Data)
  54. {
  55.     ILI9341_DC = 1;

  56.     SPI_WRITE_TX(SPI2, u8Data);

  57.     // wait tx finish
  58.     while(SPI_IS_BUSY(SPI2));
  59. }

  60. void ILI9341_LCD_DisplayOnScreen(void)
  61. {
  62.     uint32_t i,j;
  63.     uint16_t *u16ImgPtr = (uint16_t *) &u8Image[0];

  64.     LCD_WriteCommand(0x2c);

  65.     ILI9341_DC = 1;

  66.     /* Need to disable and then can change data width to 16-bit */
  67.     SPI_DISABLE(SPI2);
  68.     SPI_SET_DATA_WIDTH(SPI2, 16);
  69.     SPI_ENABLE(SPI2);

  70.     /* Load image */
  71.     for (i=0; i<320; i++) {
  72.         for (j=0; j<240; j++) {
  73.             while(SPI_GET_TX_FIFO_FULL_FLAG(SPI2));
  74.             SPI_WRITE_TX(SPI2, *(u16ImgPtr++));
  75.         }
  76.     }

  77.     // wait tx finish
  78.     while(SPI_IS_BUSY(SPI2));

  79.     /* Change data width back to 8-bit */
  80.     SPI_DISABLE(SPI2);
  81.     SPI_SET_DATA_WIDTH(SPI2, 8);
  82.     SPI_ENABLE(SPI2);

  83.     LCD_WriteCommand(0x29);
  84. }

  85. void ILI9341_LCD_SetAddress(uint32_t x1,uint32_t x2,uint32_t y1,uint32_t y2)
  86. {
  87.     if(x1 >= 240)
  88.         x1 = 239;
  89.     if(x2 >= 240)
  90.         x2 = 239;  
  91.     if(y1 >= 320)
  92.         y1 = 319;  
  93.     if(y2 >= 320)
  94.         y2 = 319;   
  95.    
  96.     LCD_WriteCommand(0x2a);
  97.     LCD_WriteData(x1>>8);
  98.     LCD_WriteData(x1);
  99.     LCD_WriteData(x2>>8);
  100.     LCD_WriteData(x2);

  101.     LCD_WriteCommand(0x2b);
  102.     LCD_WriteData(y1>>8);
  103.     LCD_WriteData(y1);
  104.     LCD_WriteData(y2>>8);
  105.     LCD_WriteData(y2);
  106. }

  107. void ILI9341_LCD_PutChar8x16(uint16_t x, uint16_t y, uint8_t c, uint32_t fColor, uint32_t bColor)
  108. {
  109.         uint32_t i,j;
  110.         for(i=0;i<16;i++){
  111.         uint8_t m=Font8x16[c*16+i];
  112.         ILI9341_LCD_SetAddress(x+i,x+i,y,y+7);
  113.         LCD_WriteCommand(0x2c);        
  114.         
  115.                 for(j=0;j<8;j++){
  116.                         if((m&0x01)==0x01){
  117.                 LCD_WriteData(fColor>>8);
  118.                                 LCD_WriteData(fColor);
  119.                         }
  120.                         else{
  121.                 LCD_WriteData(bColor>>8);
  122.                                 LCD_WriteData(bColor);
  123.                         }
  124.                         m>>=1;
  125.                 }
  126.         }
  127. }

  128. void ILI9341_LCD_PutString(uint16_t x, uint16_t y,uint8_t *s, uint32_t fColor, uint32_t bColor)
  129. {
  130.     uint8_t l=0;
  131.     while(*s){
  132.         if(*s<0x80){
  133.             ILI9341_LCD_PutChar8x16(x,312-y-l*8,*s,fColor,bColor);
  134.             s++;
  135.             l++;
  136.                 }
  137.         }       
  138. }
  139. void ILI9341_LCD_Init(void)
  140. {
  141.     /* Configure DC/RESET/LED pins */
  142.     ILI9341_DC =0;
  143.     ILI9341_RESET=0;
  144.     ILI9341_LED=0;

  145.     GPIO_SetMode(PB, BIT5, GPIO_MODE_OUTPUT);
  146.     GPIO_SetMode(PB, BIT11, GPIO_MODE_OUTPUT);
  147.     GPIO_SetMode(PB, BIT15, GPIO_MODE_OUTPUT);

  148.     /* Configure LCD */
  149.     ILI9341_DC = 1;

  150.     ILI9341_RESET = 0;
  151.     TIMER_Delay(TIMER0, 20000);

  152.     ILI9341_RESET = 1;
  153.     TIMER_Delay(TIMER0, 40000);

  154.     LCD_WriteCommand(0xCB);
  155.     LCD_WriteData(0x39);
  156.     LCD_WriteData(0x2C);
  157.     LCD_WriteData(0x00);
  158.     LCD_WriteData(0x34);
  159.     LCD_WriteData(0x02);

  160.     LCD_WriteCommand(0xCF);
  161.     LCD_WriteData(0x00);
  162.     LCD_WriteData(0xC1);
  163.     LCD_WriteData(0x30);

  164.     LCD_WriteCommand(0xE8);
  165.     LCD_WriteData(0x85);
  166.     LCD_WriteData(0x00);
  167.     LCD_WriteData(0x78);

  168.     LCD_WriteCommand(0xEA);
  169.     LCD_WriteData(0x00);
  170.     LCD_WriteData(0x00);

  171.     LCD_WriteCommand(0xED);
  172.     LCD_WriteData(0x64);
  173.     LCD_WriteData(0x03);
  174.     LCD_WriteData(0x12);
  175.     LCD_WriteData(0x81);

  176.     LCD_WriteCommand(0xF7);
  177.     LCD_WriteData(0x20);

  178.     LCD_WriteCommand(0xC0);
  179.     LCD_WriteData(0x23);

  180.     LCD_WriteCommand(0xC1);
  181.     LCD_WriteData(0x10);

  182.     LCD_WriteCommand(0xC5);
  183.     LCD_WriteData(0x3e);
  184.     LCD_WriteData(0x28);

  185.     LCD_WriteCommand(0xC7);
  186.     LCD_WriteData(0x86);

  187.     LCD_WriteCommand(0x36);
  188.     LCD_WriteData(0x48);

  189.     LCD_WriteCommand(0x3A);
  190.     LCD_WriteData(0x55);

  191.     LCD_WriteCommand(0xB1);
  192.     LCD_WriteData(0x00);
  193.     LCD_WriteData(0x18);

  194.     LCD_WriteCommand(0xB6);
  195.     LCD_WriteData(0x08);
  196.     LCD_WriteData(0x82);
  197.     LCD_WriteData(0x27);

  198.     LCD_WriteCommand(0xF2);
  199.     LCD_WriteData(0x00);

  200.     LCD_WriteCommand(0x26);
  201.     LCD_WriteData(0x01);

  202.     LCD_WriteCommand(0xE0);
  203.     LCD_WriteData(0x0F);
  204.     LCD_WriteData(0x31);
  205.     LCD_WriteData(0x2B);
  206.     LCD_WriteData(0x0C);
  207.     LCD_WriteData(0x0E);
  208.     LCD_WriteData(0x08);
  209.     LCD_WriteData(0x4E);
  210.     LCD_WriteData(0xF1);
  211.     LCD_WriteData(0x37);
  212.     LCD_WriteData(0x07);
  213.     LCD_WriteData(0x10);
  214.     LCD_WriteData(0x03);
  215.     LCD_WriteData(0x0E);
  216.     LCD_WriteData(0x09);
  217.     LCD_WriteData(0x00);

  218.     LCD_WriteCommand(0xE1);
  219.     LCD_WriteData(0x00);
  220.     LCD_WriteData(0x0E);
  221.     LCD_WriteData(0x14);
  222.     LCD_WriteData(0x03);
  223.     LCD_WriteData(0x11);
  224.     LCD_WriteData(0x07);
  225.     LCD_WriteData(0x31);
  226.     LCD_WriteData(0xC1);
  227.     LCD_WriteData(0x48);
  228.     LCD_WriteData(0x08);
  229.     LCD_WriteData(0x0F);
  230.     LCD_WriteData(0x0C);
  231.     LCD_WriteData(0x31);
  232.     LCD_WriteData(0x36);
  233.     LCD_WriteData(0x0F);

  234.     LCD_WriteCommand(0x11);
  235.     TIMER_Delay(TIMER0, 60000);

  236.     LCD_WriteCommand(0x29);    //Display on

  237.     ILI9341_LED = 1;
  238. }

  239. void LED_Init(void)
  240. {
  241.     GPIO_SetMode(PB, BIT1, GPIO_MODE_OUTPUT);
  242.     GPIO_SetMode(PC, BIT2, GPIO_MODE_OUTPUT);
  243.     GPIO_SetMode(PC, BIT3, GPIO_MODE_OUTPUT);
  244.     GPIO_SetMode(PC, BIT7, GPIO_MODE_OUTPUT);
  245.     GPIO_SetMode(PC, BIT9, GPIO_MODE_OUTPUT);
  246.     GPIO_SetMode(PC, BIT10, GPIO_MODE_OUTPUT);
  247.     GPIO_SetMode(PC, BIT11, GPIO_MODE_OUTPUT);   
  248. }

  249. void LED_Light(uint32_t u32LED)
  250. {
  251.     LED1 = u32LED;
  252.     u32LED = u32LED>>1;
  253.     LED2 = u32LED;
  254.     u32LED = u32LED>>1;
  255.     LED3 = u32LED;
  256.     u32LED = u32LED>>1;
  257.     LED4 = u32LED;
  258.     u32LED = u32LED>>1;
  259.     LED_R = u32LED;
  260.     u32LED = u32LED>>1;   
  261.     LED_G = u32LED;
  262.     u32LED = u32LED>>1;   
  263.     LED_B = u32LED;
  264.     u32LED = u32LED>>1;   
  265. }


  266. void SYS_Init(void)
  267. {
  268.     /*---------------------------------------------------------------------------------------------------------*/
  269.     /* Init System Clock                                                                                       */
  270.     /*---------------------------------------------------------------------------------------------------------*/
  271.     /* Unlock protected registers */
  272.     SYS_UnlockReg();

  273.     /* Enable External XTAL (4~24 MHz) */
  274.     CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

  275.     /* Waiting for 12MHz clock ready */
  276.     CLK_WaitClockReady( CLK_STATUS_HXTSTB_Msk);

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

  279.     /* Set PLL to power down mode and PLL_STB bit in CLKSTATUS register will be cleared by hardware.*/
  280.     CLK->PLLCTL |= CLK_PLLCTL_PD_Msk;

  281.     /* Set PLL frequency */
  282.     CLK->PLLCTL = CLK_PLLCTL_72MHz_HXT;

  283.     /* Waiting for clock ready */
  284.     CLK_WaitClockReady(CLK_STATUS_PLLSTB_Msk);

  285.     /* Switch HCLK clock source to PLL */
  286.     CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_PLL,CLK_CLKDIV0_HCLK(1));

  287.     /* Enable IP clock */
  288.     CLK_EnableModuleClock(UART0_MODULE);
  289.     CLK_EnableModuleClock(TMR0_MODULE);
  290.     CLK_EnableModuleClock(SPI2_MODULE);

  291.     /* Select IP clock source */
  292.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UARTSEL_HXT, CLK_CLKDIV0_UART(1));
  293.     CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0SEL_HXT, 0);
  294.     CLK_SetModuleClock(SPI2_MODULE, CLK_CLKSEL2_SPI2SEL_PLL, 0);

  295.     /* Update System Core Clock */
  296.     /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
  297.     SystemCoreClockUpdate();

  298.     /*---------------------------------------------------------------------------------------------------------*/
  299.     /* Init I/O Multi-function                                                                                 */
  300.     /*---------------------------------------------------------------------------------------------------------*/
  301.     /* Set GPG multi-function pins for UART0 RXD and TXD */
  302.     SYS->GPD_MFPL = SYS_GPD_MFPL_PD6MFP_UART0_RXD | SYS_GPD_MFPL_PD1MFP_UART0_TXD ;

  303.     /* SPI2: GPD12=SS, GPD15=CLK, GPD14=MISO, GPD13=MOSI */
  304.     SYS->GPD_MFPH = SYS_GPD_MFPH_PD12MFP_SPI2_SS | SYS_GPD_MFPH_PD13MFP_SPI2_MOSI | SYS_GPD_MFPH_PD14MFP_SPI2_MISO | SYS_GPD_MFPH_PD15MFP_SPI2_CLK;

  305.     /* Lock protected registers */
  306.     SYS_LockReg();
  307. }



  308. int main(void)
  309. {
  310.     uint32_t u32temp = 0;
  311.     /* Init System, IP clock and multi-function I/O */
  312.     SYS_Init();
  313.     LED_Init();

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

  316.     /* Configure SPI3 as a master, MSB first, 8-bit transaction, SPI Mode-0 timing, clock is 4MHz */
  317.     SPI_Open(SPI2, SPI_MASTER, SPI_MODE_0, 8, 4000000);

  318.     /* Configure SPI1 as a low level active device. */
  319.     SPI_EnableAutoSS(SPI2, SPI_SS, SPI_SS_ACTIVE_LOW);

  320.     /* Start SPI */
  321.     SPI_ENABLE(SPI2);

  322.     /* Init LCD */
  323.     ILI9341_LCD_Init();

  324.     /* Setup display address */
  325.     ILI9341_LCD_SetAddress(0, 239, 0, 319);

  326.     /* Show the image on the screen */
  327.     ILI9341_LCD_DisplayOnScreen();

  328.     while(1)
  329.     {
  330.         CLK_SysTickDelay(200000);
  331.         LED_Light(u32temp++);
  332.         if(PA8 == 0)
  333.             ILI9341_LCD_PutString(50,60,"Hello World!",Red,Yellow);
  334.         if(PD2 == 0)
  335.             ILI9341_LCD_PutString(50,60,"I Love You!",Red,Yellow);            
  336.     }
  337. }
heisexingqisi 发表于 2017-2-19 23:25 | 显示全部楼层
void GPIO_SetMode(GPIO_T *port, uint32_t u32PinMask, uint32_t u32Mode)
heisexingqisi 发表于 2017-2-19 23:26 | 显示全部楼层
PinMask 这个概念有点神秘。
gejigeji521 发表于 2017-2-19 23:57 | 显示全部楼层

中断的形式有
       GPIO_INT_RISING, GPIO_INT_FALLING, GPIO_INT_BOTH_EDGE, GPIO_INT_HIGH, GPIO_INT_LOW.
gejigeji521 发表于 2017-2-19 23:57 | 显示全部楼层
上升沿,下降沿,双边沿,低电平。。。
低电平的跟下降沿的区别应该在于只要开机是低电平就进入。
gejigeji521 发表于 2017-2-19 23:58 | 显示全部楼层
通过IO的中断还是可以做很多事情的。比如测量脉冲宽度,或者检测红外信号。
yiyigirl2014 发表于 2017-2-20 00:15 | 显示全部楼层
void GPIO_DisableInt(GPIO_T *port, uint32_t u32Pin)
{
    port->INTTYPE &= ~(1UL << u32Pin);
    port->INTEN &= ~((0x00010001UL) << u32Pin);
}
关闭这个中断,需要两个参数,对应端口和对应管脚编号。
mintspring 发表于 2017-2-20 00:16 | 显示全部楼层
PIN MASK可以通过逻辑运算组合操作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

204

主题

3450

帖子

8

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