2812와는 약간 다른 명칭과 구조를 가지고 있다.
2812 |
28335 |
GpioMuxRegs |
GpioCtrlRegs |
GpioDataRegs |
GpioDataRegs |
|
GpioIntRegs |
28335에서 GpioIntRegs는 인터럽트 관련 GPIO_INT_REGS 구조체변수로 구조체는 아래와 같다.
struct GPIO_INT_REGS {
union GPIOXINT_REG GPIOXINT1SEL; // XINT1 GPIO Input Selection
union GPIOXINT_REG GPIOXINT2SEL; // XINT2 GPIO Input Selection
union GPIOXINT_REG GPIOXNMISEL; // XNMI_Xint13 GPIO Input Selection
union GPIOXINT_REG GPIOXINT3SEL; // XINT3 GPIO Input Selection
union GPIOXINT_REG GPIOXINT4SEL; // XINT4 GPIO Input Selection
union GPIOXINT_REG GPIOXINT5SEL; // XINT5 GPIO Input Selection
union GPIOXINT_REG GPIOXINT6SEL; // XINT6 GPIO Input Selection
union GPIOXINT_REG GPIOXINT7SEL; // XINT7 GPIO Input Selection
union GPADAT_REG GPIOLPMSEL; // Low power modes GP I/O input select
};
GpioDataRegs는 형태가 같으며 GpioCtrlRegs가 GpioMuxRegs를 대신하며 그 구조 역시 바뀌었다.
struct GPIO_MUX_REGS {
union GPAMUX_REG GPAMUX;
union GPADIR_REG GPADIR;
union GPAQUAL_REG GPAQUAL;
Uint16 rsvd1;
union GPBMUX_REG GPBMUX;
union GPBDIR_REG GPBDIR;
union GPBQUAL_REG GPBQUAL;
Uint16 rsvd2[5];
union GPDMUX_REG GPDMUX;
union GPDDIR_REG GPDDIR;
union GPDQUAL_REG GPDQUAL;
Uint16 rsvd3;
union GPEMUX_REG GPEMUX;
union GPEDIR_REG GPEDIR;
union GPEQUAL_REG GPEQUAL;
Uint16 rsvd4;
union GPFMUX_REG GPFMUX;
union GPFDIR_REG GPFDIR;
Uint16 rsvd5[2];
union GPGMUX_REG GPGMUX;
union GPGDIR_REG GPGDIR;
Uint16 rsvd6[6];
};
struct GPIO_CTRL_REGS {
union GPACTRL_REG GPACTRL; // GPIO A Control Register (GPIO0 to 31)
union GPA1_REG GPAQSEL1; // GPIO A Qualifier Select 1 Register (GPIO0 to 15)
union GPA2_REG GPAQSEL2; // GPIO A Qualifier Select 2 Register (GPIO16 to 31)
union GPA1_REG GPAMUX1; // GPIO A Mux 1 Register (GPIO0 to 15)
union GPA2_REG GPAMUX2; // GPIO A Mux 2 Register (GPIO16 to 31)
union GPADAT_REG GPADIR; // GPIO A Direction Register (GPIO0 to 31)
union GPADAT_REG GPAPUD; // GPIO A Pull Up Disable Register (GPIO0 to 31)
Uint32 rsvd1;
union GPBCTRL_REG GPBCTRL; // GPIO B Control Register (GPIO32 to 63)
union GPB1_REG GPBQSEL1; // GPIO B Qualifier Select 1 Register (GPIO32 to 47)
union GPB2_REG GPBQSEL2; // GPIO B Qualifier Select 2 Register (GPIO48 to 63)
union GPB1_REG GPBMUX1; // GPIO B Mux 1 Register (GPIO32 to 47)
union GPB2_REG GPBMUX2; // GPIO B Mux 2 Register (GPIO48 to 63)
union GPBDAT_REG GPBDIR; // GPIO B Direction Register (GPIO32 to 63)
union GPBDAT_REG GPBPUD; // GPIO B Pull Up Disable Register (GPIO32 to 63)
Uint16 rsvd2[8];
union GPC1_REG GPCMUX1; // GPIO C Mux 1 Register (GPIO64 to 79)
union GPC2_REG GPCMUX2; // GPIO C Mux 2 Register (GPIO80 to 95)
union GPCDAT_REG GPCDIR; // GPIO C Direction Register (GPIO64 to 95)
union GPCDAT_REG GPCPUD; // GPIO C Pull Up Disable Register (GPIO64 to 95)
};
Mux값을 설정하여 핀의 기능을 정할 수 있다.
28335는 총 88개의 핀이 존재하며 이는 A,B,C로 나뉜다. 또한 여기서도 각각 MUX1, MUX2의 2부분으로 나뉜다.
GPIOA
-GPAMUX1 : 0~15(16 pin)
-GPAMUX2 : 16~31(16 pin)
GPIOB
-GPBMUX1 : 32~47(16 pin)
-GPBMUX2 : 48~63(16 pin)
GPIOC
-GPCMUX : 64~79(16 pin)
-GPCMUX : 80~87(8 pin)
이 핀들은 MUX설정에 따라 어떤 기능을 할 것인가를 정할 수 있으며 최대 4종류가 있기에 핀당 2비트가 할당되어있다.
따라서 MUX1, MUX2모두 32비트씩을 갖는다.
============================================================================================
GPIOCTRL
DSP에서 받는 신호는 우리가 원하는 신호뿐만 아니라 노이즈(잡음)이 섞여 들어오기도 한다. 따라서 Qualification이라는 단계에서 수집된 신호에 대한 샘플링(동기화)를 하게 되는데, 여기서 중요한것이 Sampling Window이다.
실례를 들면서 설명하자.
SYSCLKOUT cycle : 시스템클럭의 주기(한 클럭당 시간).
SYSCLKOUT : 시스템클럭 주파수. 초당 클럭 수
QUALPRD(CTRL) : 동기 펄스 갯수
Sampling Window : 샘플링 횟수(샘플링 횟수-1)
3번째와 4번째는 같은 말인것 같지만 넘어가자...
위 그림에서는 Sampling Window = 6-1=5이다.
(SYSCLKOUT cycle*2*QUALPRD) [1단계]
QUALPRD가 n이라고 할 때, Qualification 단계에 진입하는 신호의 2*n개째에서 값이 수집 된다. 만약 SYSCLKOUT cycle 이 10ms라고 하자. 이는 10ms당 1클럭씩 신호가 들어온다는 것이다. QUALRPD=4라고 한다면 2*4번째 신호를 샘플링 한다. 즉, 8*10ms주기로 신호를 수집한다는 것이다.
(SYSCLKOUT cycle*2*QUALPRD)*5 [2단계]
Sampling Window(width)=6일 때, 6-1=5 길이의 신호가 같은 값이면 이를 인정한다. 즉 80ms주기로 채집한 신호가 5회 연속으로 같은 값이어야 정상적인 신호로 인정한다는 것이다. 그렇다면 정상적인 한 신호의 판별에 최소 80*5ms가 걸린다는 의미가 될것이다.
QUALPRD는 총 8핀으로 값을 정할 수 있다. 0x00~0xFF까지 정할 수 있으며 0xFF일 때는 SYSCLKOUT cycle*2*255가 1단계의 길이(시간)이 될것이다.
P.S C포트에는 이 레지스터가 존재하지 않는다.
============================================================================================
GP QSEL[Qualification Select)(1,2)
이는 위에서 나온 Sampling window's width의 설정이다.
한 핀당 2비트씩 할당되어 4가지 설정이 가능하다.
00:미사용 (0샘플링. 시스템 클럭에만 동기화)
01 : width = 2(3샘플링)
10 : width = 5(6샘플링)
11 : 시스템 클럭에 비동기하게. 입력 신호의 샘플링 없이 연속적으로 받아들인다. 특수핀(주변회로)때만 유효하고 단순 GPIO일 경우 00과 같다.
============================================================================================
GPDIR
입, 출력 방향성 설정으로 GPIO로 쓸 경우 유효.
0 : 입력
1 : 출력
GPPUD
한 핀당 1비트씩 할당. I/O, 특수핀 모두 유효하며 0이면 내부 풀업. 1이면 Disable
============================================================================================
GPIO Data Registers
DAT : 32비트 레지스터. 헤당 핀의 출력의 Data를 결정
SET : 32비트 레지스터. 헤당 핀을 High로. 1만 사용 가능
CLEAR : 32비트 레지스터. 헤당 핀을 LOW로. 1만 사용 가능
TOGGLE : 32비트 레지스터. 헤당 핀의 상태를 반전. 1만 사용 가능
============================================================================================
GPIO INTx Select
GPIOXINT(1,2)SEL
하위 5비트(0~31)을 이용하여 A포트의 아무 핀이나 외부인터럽트 1,2기능을 부여 가능.
XINTnCR레지스터에서 설정 가능
GPIOXINT(3~7)SEL
하위 5비트(0~31)을 이용하여 B포트의 아무 핀이나 외부인터럽트 3~7기능을 부여 가능.
XINTnCR레지스터에서 설정 가능
GPIOXNMISEL
GPIOXINT(1,2)SEL
하위 5비트(0~31)을 이용하여 A포트의 아무 핀이나 Non-Maskable Interrupt(XNMI_XINT13핀)기능 부여 가능
GPIOLPMSEL
저전력 모드 관련
'TMS320 > F28335' 카테고리의 다른 글
Cpu Timer(2) (0) | 2014.08.19 |
---|---|
Cpu Timer(1) (1) | 2014.08.19 |
ADC(2) (0) | 2014.08.18 |
ADC(1) (0) | 2014.08.18 |
기본자료 (0) | 2014.08.18 |