1. 程式人生 > >NUC140之IO口

NUC140之IO口

NUC140的I/O的作用,無非是輸入、輸出、雙向和外設功能,這些功能是複用的,當上電未初始化時,根據晶片手冊,

NUC140的I/0口預設輸出高電平。

I/O的使用比較基礎,初始化上述幾個功能然後再使用即可,但是有幾點需要注意。

1.使用外設功能,例如UART等,要先將對應的引腳初始化為UART功能;

2.如果I/O設定為雙向功能,在讀取資料前,最好先寫1,再讀。

這樣做是為了防止在讀之前有寫0的操作,這樣再讀資料,無論輸入高低,

都會被拉低。

下面看程式。

/*****************************************
*檔名:startup_pins.c                   *
*功能:初始化引腳設定及部分引腳          *
******************************************/

#include "initialize_pins.h"

/**************************************************
 *函式名:    initialize_pins                         *
 *功能:    初始化引腳                            *
 *出口引數:無                                      *
 *入口引數:無                                      *
 *************************************************/

void initialize_pins (void)
{
    DrvGPIO_InitFunction (E_FUNC_ADC0); //PA.0設定為ADC
    DrvGPIO_InitFunction (E_FUNC_ADC1); //PA.1設定為ADC
    DrvGPIO_InitFunction (E_FUNC_ADC2); //PA.2設定為ADC 
    DrvGPIO_InitFunction (E_FUNC_ADC3); //PA.3設定為ADC
    DrvGPIO_InitFunction (E_FUNC_ADC4); //PA.4設定為ADC
    DrvGPIO_InitFunction (E_FUNC_ADC5); //PA.5設定為ADC
    DrvGPIO_InitFunction (E_FUNC_ADC6); //PA.6設定為ADC
    DrvGPIO_InitFunction (E_FUNC_ADC7); //PA.7設定為ADC
    
    DrvGPIO_InitFunction (E_FUNC_UART0_RX_TX);   //PB.0,PB.1設定為串列埠
    DrvGPIO_Open (E_GPB, 2, E_IO_OUTPUT);  //PB.2設定為輸出I/O
    DrvGPIO_Open (E_GPB, 3, E_IO_OUTPUT);  //PB.3設定為輸出I/O
    DrvGPIO_Open (E_GPB, 4, E_IO_QUASI);   //PB.4設定為雙向I/O
    DrvGPIO_Open (E_GPB, 5, E_IO_QUASI);   //PB.5設定為雙向I/O
    DrvGPIO_Open (E_GPB, 6, E_IO_QUASI);   //PB.6設定為雙向I/O
    DrvGPIO_Open (E_GPB, 7, E_IO_OUTPUT);  //PB.7設定為輸出I/O
    DrvGPIO_Open (E_GPB, 10, E_IO_OUTPUT); //PB.10設定為輸出I/O
    DrvGPIO_InitFunction (E_FUNC_PWM4);    //PB.11設定為PWM
    DrvGPIO_Open (E_GPB, 13, E_IO_OUTPUT); //PB.13設定為輸出 I/O
    
    DrvGPIO_Open (E_GPC, 5, E_IO_OUTPUT);  //PC.5設定為輸出I/O

    DrvGPIO_Open (E_GPD, 9, E_IO_QUASI);   //PD.9設定為雙向I/O
    DrvGPIO_Open (E_GPD, 10, E_IO_QUASI);  //PD.10設定為雙向I/O  
    DrvGPIO_Open (E_GPD, 11, E_IO_QUASI);  //PD.11設定為雙向I/O
    DrvGPIO_Open (E_GPD, 12, E_IO_QUASI);  //PD.12設定為雙向I/O
    DrvGPIO_Open (E_GPD, 13, E_IO_QUASI);  //PD.13設定為雙向I/O
    
    DrvGPIO_Open (E_GPE, 4, E_IO_OUTPUT);  //PE.4設定為輸出I/O 
    DrvGPIO_InitFunction ( E_FUNC_PWM5 );  //PE.5設定為PWM
    DrvGPIO_Open (E_GPE, 6, E_IO_INPUT);   //PE.6設定為輸入I/O
    DrvGPIO_Open (E_GPE, 7, E_IO_OUTPUT);  //PE.7設定為輸出I/O
    DrvGPIO_Open (E_GPE, 8, E_IO_OUTPUT);  //PE.8設定為輸出I/O 
    DrvGPIO_Open (E_GPE, 13, E_IO_OUTPUT); //PE.13設定為輸出I/O 
    DrvGPIO_Open (E_GPE, 14, E_IO_OUTPUT); //PE.14設定為輸出I/O 
    DrvGPIO_Open (E_GPE, 15, E_IO_OUTPUT); //PE.15設定為輸出I/O 

    DrvGPIO_SetBit (E_GPE, 15); //PE.15置1
    DrvGPIO_SetBit (E_GPE, 14); //PE.14置1
    DrvGPIO_SetBit (E_GPE, 13); //PE.13置1
    DrvGPIO_SetBit (E_GPB, 13); //PB.13置1
    DrvGPIO_ClrBit (E_GPB, 7);  //PB.7置0
    DrvGPIO_SetBit (E_GPE, 8);  //PE.8置1
    DrvGPIO_SetBit (E_GPE, 7);  //PE.7置1
    DrvGPIO_ClrBit (E_GPB, 2);  //PB.2置0
    DrvGPIO_ClrBit (E_GPB, 3);  //PB.3置0

    /*濾波器選擇*/
    if (channel_space == 1)     //25K通道間隔
    {
        DrvGPIO_ClrBit (E_GPC, 5);  //PC.5置0
    }
    else                        //8.33K
    {
        DrvGPIO_SetBit (E_GPC, 5);  //PC.5置1    
    }

    DrvGPIO_SetBit (E_GPB, 10); //PB.10置1
    DrvGPIO_ClrBit (E_GPE, 4);  //PE.4置0
}


標頭檔案為

#ifndef initialize_pins_h
#define initialize_pins_h

#include "DrvGPIO.h"
#include "common_variables.h"

extern void initialize_pins (void); //初始化引腳函式

#endif