找回密码
 注册
关于网站域名变更的通知
查看: 393|回复: 3
打印 上一主题 下一主题

28335的GPIO的引脚配置

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-12-15 13:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
F28335有三种32位的I/O口,依次PORTA(GPIO0-GPIO31), PORTB(GPIO32-GPIO63), PORTC(GPIO64-GPIO87),这些口都可以配置为普通的数字IO口同样也能被配置为外部接口。
" M) T- u! R; Z0 ]- i" @这样涉及到了IO的寄存器,IO口共有三类寄存器:4 ~! h5 ^9 ^% Y2 U
控制寄存器、数据寄存器和中断控制寄存器。5 O! l: u) {( o5 v8 d; Z: Z
1、 GPIO可以配置为数字I/O或外设I/O口,GPxMUX1(2):‘0’为数字I/O,‘1’为外设I/O口;2 J, r  Z+ ]( B
2: GPIO可以配置为内部电阻上拉功能,GPxPUD:‘0’为上拉,‘1’为禁止上拉2 q4 |: C+ ^( L/ t7 l" f1 K$ u
3: GPIO具有数字滤波功能,GPxQSEL1(2):量化输入寄存器,可以确定是3周期采样
3 V) ]+ R2 {0 H, Z4 ?4 i+ H还是6周期采样或者不用采样;7 a; ^* M8 C; J! |6 j
GPIO可以配置为内部电阻上拉功能,GPxPUD:‘0’为上拉,‘1’为禁止上拉,0 K0 @2 R6 k+ H* @  O

0 J/ E; O: k$ P. U4、 输入输出可配置,GPxDIR是控制每个引脚的输入或是输出,‘0’是输入,‘1’是输出;! b7 Q! B7 d) y. @
当GPIO配置为数字I/O时注意:
. i/ Y% @! @6 A1)28335引脚作为输出时,虽然可以通过设置GPADAT或GPBDAT改变输出端口的高低电平,但是单独写某一位时可能会使其它引脚产生误操作。为了避免这种现象的产生,改变输出引脚的高低电平时,应该使用GPIOxSET(置位),GPIOxCLEAR(清零),GPIOxTOGGLE(反向,可以代替去翻操作)寄存器载入输出锁存寄存,GPIOxDIR配置方向,1为输出,0为输入.
+ a5 y! {6 K7 D; e- x; I2)当使用GPADAT的时候,一般是在初始化中,在函数中使用需要添加延时,否则可能达不到预定的输出状态。使用GPIOxSET(置位),GPIOxCLEAR(清零),GPIOxTOGGLE(反向)电平会立即变化,无需添加延时。
1 y, r+ l8 o  F$ I% _GPIOxSET, GPIOxCLEAR, GPIOxTOGGLE仅仅等于1时才有效,等于0无效" f& x% O2 s, R; P3 `4 _" u2 ^
& @. e! V, o! O5 j
以下例程是针对野火DSP28335开发板的程序,已经验证。( a9 ?5 z" H$ s+ Y0 S( V; }
#include “DSP2833x_Device.h” // DSP2833x HeadeRFile Include File
3 o( Y, v3 U% N9 }#include “DSP2833x_Examples.h” // DSP2833x Examples Include File! H. I0 l' Q) p
void Gpio_select(void);
2 E/ S; E: R/ \6 A4 Bvoid delay_loop();* Q% P7 I+ k7 i" B' t
int main(void) {: N* I; o0 Z" n
MEMCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);0 h  u9 e/ e3 g8 \- t$ N2 z# a
InitFlash();1 C2 k8 C+ E- h6 A( C- x0 h
9 p6 M* F* K% [7 q
InitSysCtrl();7 k! v: r0 L  ]/ G# p! A; n

+ @/ t1 {* _- o; ]* ]) YGpio_select();//GPIO 初始化7 j" s7 v2 s1 H' Q
. J4 ]( I7 x* ^5 m& a" Q
// 步骤 3. 清除所有中断初始化中断向量表:
( s' {: P3 d2 w) I, I// 禁止CPU全局中断) J$ }' M$ @* X: t  f& B
DINT;
) Z0 F5 \/ b7 Q, B// 初始化PIE控制寄存器到他们的默认状态.- d+ b! _% r" e) |" D' s) b4 \
// 这个默认状态就是禁止PIE中断及清除所有PIE中断标志. W7 v2 Q- o) ]; l" W$ u
// 这个函数放在DSP2833x_PieCtrl.c源文件里3 j, d) z# k' E# o# [
InitPieCtrl();
' E: z" I% G. f0 }' F$ }' U3 \1 A// 禁止CPU中断和清除所有CPU中断标志
7 j$ W$ y3 z4 G( ?. [5 L4 WIER = 0x0000;7 s- Y" Z. p  p
IFR = 0x0000;! p+ z- S9 \9 u5 F

! h" S! a: h* I( W" o" c8 Q/ i//初始化PIE中断向量表,并使其指向中断服务子程序(ISR)
' i6 l" p0 S0 h1 e+ |! a' n6 K// 这些中断服务子程序被放在了DSP280x_DefaultIsr.c源文件中' ?% b; Y' U- M% c, ?- @
// 这个函数放在了DSP2833x_PieVect.c源文件里面.
4 O8 Q. h9 E0 m  f' PInitPieVectTable();8 d4 F' t- o  T! @
, ?, x, P3 g( a& d" {
GpioDataRegs.GPBDAT.all    =0x00000000;//第28、29位为低电平LED灯亮0 R+ h& E* N, f+ U  E
GpioDataRegs.GPCDAT.all    =0x00000000;//第0 -4位为低电平LED灯亮' h( M* e' V8 a$ ]6 n# p1 r+ p. k
delay_loop();; Y  ^, [% [, n. `  C1 j8 n
delay_loop();
# g/ A/ p, `7 Z' o7 G- \/ j$ I* {7 }
// for(;?
/ c% N" _# X' v: u2 u1 D! d' W0 c6 n7 x# i
while(1)
4 J7 s3 b8 W' }$ w' ~7 A    {! ^8 m* u( v1 a
       delay_loop();  //延时" s2 x& ?& Q6 A3 l5 S
       GpioDataRegs.GPBTOGGLE.all =0x30000000;  //电平翻转
+ c5 [1 O2 [4 P& ?, u6 v       GpioDataRegs.GPCTOGGLE.all =0x0000001F;  //电平翻转1 s- E4 ]  E  x$ e, `
    }2 t" w+ s* J, v

0 c4 p& e8 v6 y5 r/*
7 v* x, \+ I4 e9 t0 R) fEALLOW;
  c, ]: g0 w( f5 |# S2 X# Z8 k// 把LED灯熄灭* `- d* v( F# \5 B6 m: s7 W
GpioDataRegs.GPBSET.bit.GPIO60 =1;
( @8 U3 f1 O$ OGpioDataRegs.GPBSET.bit.GPIO61 =1;& d9 q/ A. S- f1 X
GpioDataRegs.GPCSET.bit.GPIO64 =1;
# C) ^0 K& x6 YGpioDataRegs.GPCSET.bit.GPIO65 =1;
% E) V+ p9 u  o2 g' u1 _! h+ Y' KGpioDataRegs.GPCSET.bit.GPIO66 =1;6 z- }5 o+ r: l0 G
GpioDataRegs.GPCSET.bit.GPIO67 =1;
" y# d" Y- p9 k) CGpioDataRegs.GPCSET.bit.GPIO68 =1;
. {! P5 W0 a! r. \" JEDIS;8 d3 j/ I- f4 f0 u

9 Y( M- D  ~2 o7 c5 p   delay_loop();; ^# x. S& A: c* R$ M( a; Z
16 W% ]# E5 P2 N$ R; a) v! I( {- T0 l
/5 T) M; k: j' b: U$ {- G6 @# H
// GpioDataRegs.GPBTOGGLE.all =0x30000000;
0 Y$ ]! Z7 {( M* B/ E/ A8 J// GpioDataRegs.GPCTOGGLE.all =0x0000001F;
. _  \% Q- e: \( a! ^* P) D' t# z/ EALLOW;7 c- H  Q" s2 m
// 打开LED灯, Z% K! Y( q' u
GpioDataRegs.GPBCLEAR.bit.GPIO60 =1;1 V3 x' [( S9 ^
GpioDataRegs.GPBCLEAR.bit.GPIO61 =1;" i& T: {  f3 X0 {5 N
GpioDataRegs.GPCCLEAR.bit.GPIO64 =1;5 q, H( d0 X0 D( R" a: T5 o
GpioDataRegs.GPCCLEAR.bit.GPIO65 =1;
1 ~7 G9 r9 v: }GpioDataRegs.GPCCLEAR.bit.GPIO66 =1;
0 G) h% B9 R# l$ wGpioDataRegs.GPCCLEAR.bit.GPIO67 =1;) D6 }) {8 H8 U1 l- F2 s1 X5 C
GpioDataRegs.GPCCLEAR.bit.GPIO68 =1;6 ^- M3 T7 Y! D. B. }4 {0 b% t/ Q3 k/ E
EDIS;  J! u0 `- s: S8 I$ S8 R) [8 R
*/$ ?/ {, V% R- y! S
/ Y- B; K1 T1 @
return 0;9 y4 s8 b/ g$ G+ c, W
1
0 j* }  |; U& \" B5 P}" ~8 S% M. i/ {/ E

+ X8 T0 G6 O& d- T# O/ O5 I! }( ]void delay_loop()
  @/ v. ?) R+ r* s$ R% Q7 `( [{
/ }% f8 n( Z- x5 ]' QUint32 i;# I3 ?  y9 z/ Y4 ?1 y: @. D2 K
Uint32 j;  n. c% @% c% }. V' W- c) m
for(i=0;i<32;i++)4 u% F; _* R3 N% V2 @
for (j = 0; j < 100000; j++) {}+ S" J) _) c( n" ]  Y3 t
}
3 @) v9 C7 _7 A+ ]& W* o: q. k+ @& J0 t: }3 ~8 l0 _
void Gpio_select(void)
$ J! l! ^/ x7 r( m7 L& @9 [{
8 q$ }' ^& N. Z$ V0 K  }" hEALLOW;
/ M/ Q" o8 C+ y& p* ?$ vGpioCtrlRegs.GPAMUX1.all = 0x00000000;  // All GPIO/ o) J3 p2 S$ o" s" S: L/ I
GpioCtrlRegs.GPAMUX2.all = 0x00000000;  // All GPIO
* f( n1 {. A3 Z+ {% }& OGpioCtrlRegs.GPBMUX1.all = 0x00000000;  // All GPIO
; K# n" v1 \$ n/ uGpioCtrlRegs.GPBMUX2.all = 0x00000000;  // All GPIO! h/ z1 |  l: ?
GpioCtrlRegs.GPCMUX1.all = 0x00000000;  // All GPIO" ^: K8 a+ U, g; K
GpioCtrlRegs.GPCMUX2.all = 0x00000000;  // All GPIO
" F- P" W  E- C0 Z' ?0 d3 @, @3 }- H% }7 t9 n3 A% g
$ l) F* G( B6 S7 l/ M
GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF;   // All outputs
8 p2 v/ L0 B: v) i3 KGpioCtrlRegs.GPBDIR.all = 0xFFFFFFFF;   // All outputs# A" G( L' {1 \2 B; w! D: T
GpioCtrlRegs.GPCDIR.all = 0xFFFFFFFF;   // All outputs
3 b5 B! y2 _  E  G8 F; `+ I3 V& a7 t& b1 ?  f
EDIS;8 n3 w7 |, `& R" h* ?

5 R  k, c" e6 v, W+ k& |3 v2 V}
( J  \* L( q+ m9 q$ m2 M. D. w7 Q3 \" L" t7 T- q3 e1 y

8 C: U$ q4 Y4 p+ F0 `7 z/ ]* l0 O

该用户从未签到

2#
发表于 2021-12-15 16:06 | 只看该作者
28335引脚作为输出时,单独写某一位时可能会使其它引脚产生误操作

该用户从未签到

3#
发表于 2021-12-15 16:07 | 只看该作者
利用GPIO的数字滤波功能,确定采样周期

该用户从未签到

4#
发表于 2021-12-15 16:08 | 只看该作者
  GPIO可以配置为内部电阻上拉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 00:37 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表