EDA365电子论坛网
标题:
28335的GPIO的引脚配置
[打印本页]
作者:
kiygb
时间:
2021-12-15 13:37
标题:
28335的GPIO的引脚配置
F28335有三种32位的I/O口,依次PORTA(GPIO0-GPIO31), PORTB(GPIO32-GPIO63), PORTC(GPIO64-GPIO87),这些口都可以配置为普通的数字IO口同样也能被配置为外部接口。
6 b9 f, p+ a8 [/ z
这样涉及到了IO的寄存器,IO口共有三类寄存器:
% H3 ?6 N( ^& b3 G$ H' E
控制寄存器、数据寄存器和中断控制寄存器。
9 M) }3 z" ^5 V& [$ w h" o. j
1、 GPIO可以配置为数字I/O或外设I/O口,GPxMUX1(2):‘0’为数字I/O,‘1’为外设I/O口;
' T# [2 U7 v$ I, E' Q" L
2: GPIO可以配置为内部电阻上拉功能,GPxPUD:‘0’为上拉,‘1’为禁止上拉
+ n! z: b$ t3 s/ i# V
3: GPIO具有数字滤波功能,GPxQSEL1(2):量化输入寄存器,可以确定是3周期采样
, ~3 D, ?* k. z9 O5 [9 s
还是6周期采样或者不用采样;
+ [" x& N" c3 Q/ k
GPIO可以配置为内部电阻上拉功能,GPxPUD:‘0’为上拉,‘1’为禁止上拉,
5 ]9 v1 p2 D+ I; U& ?2 g
( \) q9 X& t) x8 j r' a, ^0 N# b
4、 输入输出可配置,GPxDIR是控制每个引脚的输入或是输出,‘0’是输入,‘1’是输出;
. A9 r! f+ m7 o" F' x# x) S; a
当GPIO配置为数字I/O时注意:
* ]* [$ C5 W: S( ^
1)28335引脚作为输出时,虽然可以通过设置GPADAT或GPBDAT改变输出端口的高低电平,但是单独写某一位时可能会使其它引脚产生误操作。为了避免这种现象的产生,改变输出引脚的高低电平时,应该使用GPIOxSET(置位),GPIOxCLEAR(清零),GPIOxTOGGLE(反向,可以代替去翻操作)寄存器载入输出锁存寄存,GPIOxDIR配置方向,1为输出,0为输入.
: [# D) a. P' K) {$ J/ U7 v0 h
2)当使用GPADAT的时候,一般是在初始化中,在函数中使用需要添加延时,否则可能达不到预定的输出状态。使用GPIOxSET(置位),GPIOxCLEAR(清零),GPIOxTOGGLE(反向)电平会立即变化,无需添加延时。
/ P* ^5 u+ t' W! r. ]7 P
GPIOxSET, GPIOxCLEAR, GPIOxTOGGLE仅仅等于1时才有效,等于0无效
. l4 w$ ]4 f/ ]1 l. e8 Q
% o1 M# q: [! F8 ^
以下例程是针对野火DSP28335开发板的程序,已经验证。
L' Q8 z& ?/ t; u+ Y
#include “DSP2833x_Device.h” // DSP2833x Headerfile Include File
" d- k" d- x# U! K; a/ k$ H0 f
#include “DSP2833x_Examples.h” // DSP2833x Examples Include File
8 r2 Z0 H! ]6 ~" V& d! c3 J
void Gpio_select(void);
. Q) {" U/ \3 F7 r
void delay_loop();
" m# W+ [, |& G# U t
int main(void) {
4 y; ]7 V) `1 H8 u% s: G% E
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
# ?" w) _6 G- N6 }. O
InitFlash();
* }, x3 G) q9 \7 U+ z
/ N+ }- c4 |$ s7 r2 g: w/ Q! e4 ]' G
InitSysCtrl();
6 y6 }4 E p. Z+ q! y+ j- v
" D; T! T& ^5 ^5 x# v0 V
Gpio_select();//GPIO 初始化
" a2 d: ^$ e4 }- r" f
9 T% C* h* o6 r% l# r2 i$ U9 g8 t
// 步骤 3. 清除所有中断初始化中断向量表:
* n+ v' O f; W$ t$ ^
// 禁止CPU全局中断
2 B- B+ ?! Y R- f
DINT;
, n1 A! Z8 m m( d
// 初始化PIE控制寄存器到他们的默认状态.
5 r" e3 \8 [$ p
// 这个默认状态就是禁止PIE中断及清除所有PIE中断标志
8 g% [% _) f. _9 ?! i5 D0 j3 j
// 这个函数放在DSP2833x_PieCtrl.c源文件里
( q/ p8 I8 f# C/ Z
InitPieCtrl();
+ C* t1 b: M4 L; e- C: ]- h. _
// 禁止CPU中断和清除所有CPU中断标志
# S& A: [) W# _3 a; d( p
IER = 0x0000;
, t3 s( C2 G, r! U- Z, u
IFR = 0x0000;
1 U$ M3 E* g5 M% p; Z" v# z, l% c
, `8 q j M$ T
//初始化PIE中断向量表,并使其指向中断服务子程序(ISR)
0 }9 |: l: V9 ]7 n+ r
// 这些中断服务子程序被放在了DSP280x_DefaultIsr.c源文件中
( g/ `, H5 C* V# r( l8 q8 D
// 这个函数放在了DSP2833x_PieVect.c源文件里面.
( \8 k' P6 P* x- l( Y
InitPieVectTable();
3 \: a+ Q ]& s
. d1 J0 x @; g' g* B
GpioDataRegs.GPBDAT.all =0x00000000;//第28、29位为低电平LED灯亮
# j9 a5 g9 _, j. L3 R. [
GpioDataRegs.GPCDAT.all =0x00000000;//第0 -4位为低电平LED灯亮
1 M6 Z9 g4 B) f4 l( V
delay_loop();
g# L& j. R0 J: {0 m* P# ?7 @
delay_loop();
* B1 ~! W7 i$ I: B. O9 O6 h
) j! H3 Y6 ~, f1 l+ \
// for(;?
$ i6 ~. L7 u* r8 W/ O# e1 X& }0 k( b: y
9 J5 r4 K$ S; D) D4 d6 q' ?
while(1)
& d+ N8 }. S" W3 s3 K0 F0 A/ l- Z
{
9 i! U0 N0 W. p( b" Y# ^/ z/ u+ e
delay_loop(); //延时
# l' ~& y, _ P( d" w0 x
GpioDataRegs.GPBTOGGLE.all =0x30000000; //电平翻转
+ y& p! s+ S% L& n
GpioDataRegs.GPCTOGGLE.all =0x0000001F; //电平翻转
; v% X7 l1 a: A5 J _- g# }
}
! ~0 U' r* z! H5 n
! g/ b! T0 T, _. w3 o, ^ ^: }2 q
/*
; l( {% |" h' z, L$ O0 H, R
EALLOW;
# D8 v* r: I5 Z, ?
// 把LED灯熄灭
( Q+ l+ G) s. f8 C" O
GpioDataRegs.GPBSET.bit.GPIO60 =1;
+ g, \/ o0 @" {, g$ m8 X+ v
GpioDataRegs.GPBSET.bit.GPIO61 =1;
3 `3 |- k }7 [$ d8 H+ _
GpioDataRegs.GPCSET.bit.GPIO64 =1;
6 w! w$ a0 }" h! J
GpioDataRegs.GPCSET.bit.GPIO65 =1;
, c G4 x3 s- _+ J% V
GpioDataRegs.GPCSET.bit.GPIO66 =1;
) H& j3 P g5 b9 E
GpioDataRegs.GPCSET.bit.GPIO67 =1;
) @- e5 _7 N2 v7 s @) X
GpioDataRegs.GPCSET.bit.GPIO68 =1;
* V1 R; G+ K) `. _4 f8 q
EDIS;
1 i. O4 R5 |: ^+ }* R/ ~
' A+ `& o; O+ s5 z: w9 V
delay_loop();
' E/ ]; t. B4 }' Q) N9 A/ Q5 w1 O& i
1
6 Q1 ]3 X" ~$ i5 j/ v
/
4 c+ N( d. @ Q
// GpioDataRegs.GPBTOGGLE.all =0x30000000;
7 \ B( ^$ D3 h- u
// GpioDataRegs.GPCTOGGLE.all =0x0000001F;
9 a& ?8 o6 V! O. S) P5 |5 h) o1 q
/ EALLOW;
* d2 i' E1 Z0 a7 I) d6 w5 o
// 打开LED灯
# \& F z3 i( G& k ?
GpioDataRegs.GPBCLEAR.bit.GPIO60 =1;
* P/ V& `* f% F( p# k% d
GpioDataRegs.GPBCLEAR.bit.GPIO61 =1;
- J: W: U1 ~2 b$ v8 b
GpioDataRegs.GPCCLEAR.bit.GPIO64 =1;
1 w4 A5 |, F+ \0 h L
GpioDataRegs.GPCCLEAR.bit.GPIO65 =1;
1 E8 \' p' C1 m0 U6 _5 P- f
GpioDataRegs.GPCCLEAR.bit.GPIO66 =1;
( w! l0 `$ N. y
GpioDataRegs.GPCCLEAR.bit.GPIO67 =1;
/ E6 Z& u( s9 ]8 m5 Y
GpioDataRegs.GPCCLEAR.bit.GPIO68 =1;
2 W( O. i: }) K y, E
EDIS;
& a( [, `6 @7 E" a
*/
4 X. f5 x- T$ N* L. a0 l" E
: m+ t) {. O y; z
return 0;
0 q4 g; h5 a/ }: u
1
: N% ^( m7 d6 K* G# Q& c0 N I
}
; D Y8 H4 {5 c( T
, p9 K; |( U- \; k; G# J! q; q* ?
void delay_loop()
& }+ S4 I: B! t- k) e5 z- f
{
( H; y9 [9 i) O/ W- \& @5 c" ^* d
Uint32 i;
* K r8 V- D+ e+ t
Uint32 j;
) f8 `( t9 m) `& \0 i4 e$ a5 {( g
for(i=0;i<32;i++)
+ C: h+ }: N. |
for (j = 0; j < 100000; j++) {}
8 K8 P3 W$ F( a) j3 w: j
}
; J1 _+ T) F* }& _
+ l8 \1 O2 G! ?1 K+ f
void Gpio_select(void)
# c. m( J# H/ Z& w3 z
{
+ K: U8 m! y5 A
EALLOW;
6 a9 R. F7 V/ ]/ `) E+ d! U( _
GpioCtrlRegs.GPAMUX1.all = 0x00000000; // All GPIO
3 I) \1 h6 e9 v' j* b$ o
GpioCtrlRegs.GPAMUX2.all = 0x00000000; // All GPIO
6 c& d! s" v/ E1 I3 e4 {
GpioCtrlRegs.GPBMUX1.all = 0x00000000; // All GPIO
4 f+ ~* s4 D- k$ E7 ?
GpioCtrlRegs.GPBMUX2.all = 0x00000000; // All GPIO
) Z' q1 B) a# c, {. M/ z
GpioCtrlRegs.GPCMUX1.all = 0x00000000; // All GPIO
& O/ w. r, i7 }% g- R* G8 F
GpioCtrlRegs.GPCMUX2.all = 0x00000000; // All GPIO
, g, |1 |4 j6 z2 v3 Z, j/ m6 ~3 y
% L: w* }+ f( W0 m
; l2 D& i% N) E
GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF; // All outputs
2 H* M3 D3 y4 q% g
GpioCtrlRegs.GPBDIR.all = 0xFFFFFFFF; // All outputs
1 }8 x1 C% g. q1 ]/ | R% ?
GpioCtrlRegs.GPCDIR.all = 0xFFFFFFFF; // All outputs
7 V7 F- |2 t0 s
* J! t0 i7 r) U& {: |
EDIS;
: {! d# z: K# u4 {+ |/ ?
# G6 J: r0 a1 {/ {
}
) ]: [7 E% U6 r+ M. S
, x( w1 B2 a$ V6 U o1 e0 t/ m
6 I p+ F( p0 R- z0 N# z, o. a
作者:
sdsdwwwe22
时间:
2021-12-15 16:06
28335引脚作为输出时,单独写某一位时可能会使其它引脚产生误操作
作者:
nuiga
时间:
2021-12-15 16:07
利用GPIO的数字滤波功能,确定采样周期
作者:
grand
时间:
2021-12-15 16:08
GPIO可以配置为内部电阻上拉
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2