找回密码
 注册
关于网站域名变更的通知
查看: 362|回复: 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口同样也能被配置为外部接口。
' u6 E) E, g. T1 N$ b这样涉及到了IO的寄存器,IO口共有三类寄存器:
. F1 l; [& T; f" O( h: H控制寄存器、数据寄存器和中断控制寄存器。8 Q5 @6 w2 |$ X" t- X, n3 v$ i" a2 F
1、 GPIO可以配置为数字I/O或外设I/O口,GPxMUX1(2):‘0’为数字I/O,‘1’为外设I/O口;6 `5 x7 t2 h% h
2: GPIO可以配置为内部电阻上拉功能,GPxPUD:‘0’为上拉,‘1’为禁止上拉
& S% t! Y) i/ Q3: GPIO具有数字滤波功能,GPxQSEL1(2):量化输入寄存器,可以确定是3周期采样
1 j8 A( n: b0 X还是6周期采样或者不用采样;" h7 F( n' E0 ~
GPIO可以配置为内部电阻上拉功能,GPxPUD:‘0’为上拉,‘1’为禁止上拉,
) n/ e$ L8 X  @6 y& T5 t: |
7 Z3 M3 C- U' R4、 输入输出可配置,GPxDIR是控制每个引脚的输入或是输出,‘0’是输入,‘1’是输出;
* R. ~: ~- B# N  J当GPIO配置为数字I/O时注意:
' d0 z% A9 q8 x2 w( N1)28335引脚作为输出时,虽然可以通过设置GPADAT或GPBDAT改变输出端口的高低电平,但是单独写某一位时可能会使其它引脚产生误操作。为了避免这种现象的产生,改变输出引脚的高低电平时,应该使用GPIOxSET(置位),GPIOxCLEAR(清零),GPIOxTOGGLE(反向,可以代替去翻操作)寄存器载入输出锁存寄存,GPIOxDIR配置方向,1为输出,0为输入.
" E5 V8 K7 x/ Z% o5 G* Z2)当使用GPADAT的时候,一般是在初始化中,在函数中使用需要添加延时,否则可能达不到预定的输出状态。使用GPIOxSET(置位),GPIOxCLEAR(清零),GPIOxTOGGLE(反向)电平会立即变化,无需添加延时。
* n0 j1 o  X3 P2 Z# Z6 qGPIOxSET, GPIOxCLEAR, GPIOxTOGGLE仅仅等于1时才有效,等于0无效
. z3 @" C% B6 l( X3 T8 Q7 j; u2 z2 V0 U5 T. f  O' T
以下例程是针对野火DSP28335开发板的程序,已经验证。
( D4 F+ a/ f9 p* _0 u#include “DSP2833x_Device.h” // DSP2833x HeadeRFile Include File
1 x' Y5 o* l% {% m#include “DSP2833x_Examples.h” // DSP2833x Examples Include File: B% B* f" P7 j* f
void Gpio_select(void);; i4 n- T4 M1 @9 U* H& h) y# z0 u6 |
void delay_loop();2 D3 B. k& s' D% g
int main(void) {
* S; B$ b" a0 P) z* G9 TMEMCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);/ O  \* p- o2 ]" e
InitFlash();  W, F; v" E2 X& q5 t' g
4 V, u8 d' B' E. `1 L$ k1 e
InitSysCtrl();3 k* R1 Y% `* d$ A6 S0 D1 _

2 H; k4 F6 }/ V$ A! `Gpio_select();//GPIO 初始化) R% l7 _% n, Z' D9 `* q
% Y& @& r6 i! d8 m
// 步骤 3. 清除所有中断初始化中断向量表:. b1 I+ _" X$ [; g3 P8 ]
// 禁止CPU全局中断
7 o+ d2 ^8 H6 H$ i' _DINT;
5 o, S! a' r* `. t+ _1 a- ]// 初始化PIE控制寄存器到他们的默认状态.
1 O* p' x3 w5 C: b// 这个默认状态就是禁止PIE中断及清除所有PIE中断标志( k; X7 r* [: M( U) @9 Y; l
// 这个函数放在DSP2833x_PieCtrl.c源文件里- X* R: d1 p' X2 I
InitPieCtrl();- l: O* M3 M$ G! q7 l7 a' |) H
// 禁止CPU中断和清除所有CPU中断标志& Z. y4 z+ H: |9 O) i0 u( ~
IER = 0x0000;
) u: I9 H3 F2 lIFR = 0x0000;* C  |+ c2 T: v

9 i: `% l! v+ i//初始化PIE中断向量表,并使其指向中断服务子程序(ISR)
6 ^& Y: X9 l1 I" @: j0 Z( |6 ~( r& S// 这些中断服务子程序被放在了DSP280x_DefaultIsr.c源文件中
: K* j; n1 K4 H// 这个函数放在了DSP2833x_PieVect.c源文件里面.
' m- m( W2 u* \4 lInitPieVectTable();
8 K5 {: b: ~1 v2 b1 q
1 v5 j  D6 K- B$ dGpioDataRegs.GPBDAT.all    =0x00000000;//第28、29位为低电平LED灯亮
: W4 Q1 ~$ x! D3 q8 {4 v; xGpioDataRegs.GPCDAT.all    =0x00000000;//第0 -4位为低电平LED灯亮1 ^, G7 C( s! O4 u
delay_loop();, Q5 e4 P/ P% t0 H
delay_loop();
' s- Y7 O0 P! f$ l9 x+ V
2 n, M5 V/ b2 y// for(;?# h, a( c" W" D. ~6 U6 S3 j
8 ]& R1 h8 G" v5 F+ x. D( J
while(1)5 T! j( w& K8 K8 O1 W
    {' w; b. k+ ^# G+ {' E% N: w
       delay_loop();  //延时
4 p/ o7 Y4 x8 c       GpioDataRegs.GPBTOGGLE.all =0x30000000;  //电平翻转+ b8 Q  ~) o4 `0 k" l1 j
       GpioDataRegs.GPCTOGGLE.all =0x0000001F;  //电平翻转
3 V1 z2 W( a5 n    }; }5 T8 d- V2 u/ _1 d3 Q

8 w! R4 u$ o4 v; g, W/*8 I3 N% A; M# s6 C9 H
EALLOW;& |6 M, X1 i! Y- D
// 把LED灯熄灭
* f4 C5 l+ L+ k" ~/ j' f  CGpioDataRegs.GPBSET.bit.GPIO60 =1;1 m8 C3 h+ ]$ G5 F/ d
GpioDataRegs.GPBSET.bit.GPIO61 =1;! m: r8 [! m1 |& f0 a  Z/ ?# q8 L
GpioDataRegs.GPCSET.bit.GPIO64 =1;( ]( W4 ~1 I. G$ }$ \
GpioDataRegs.GPCSET.bit.GPIO65 =1;2 y. Y/ y8 v! g0 ^! J7 N* B7 Z
GpioDataRegs.GPCSET.bit.GPIO66 =1;9 ~2 |5 O% f. D0 T' E
GpioDataRegs.GPCSET.bit.GPIO67 =1;
, N# A7 f9 \6 IGpioDataRegs.GPCSET.bit.GPIO68 =1;
: ]3 ^9 O9 p. o) G, JEDIS;
' j3 O) {; p% U" a' P8 {! m2 _6 D% \1 D1 r9 E9 X* u
   delay_loop();) n3 F, c. ~: J5 L# M# L) P
10 w7 `+ p9 J9 g: K
/" W# g, E# L. F! P7 ?6 G
// GpioDataRegs.GPBTOGGLE.all =0x30000000;' s! ]7 |2 X0 n+ d- x
// GpioDataRegs.GPCTOGGLE.all =0x0000001F;
7 }9 ~  m# F  `) Z4 j- Z/ EALLOW;
! o& [% w! b. i// 打开LED灯2 H% ?% ~+ l8 E% }, l
GpioDataRegs.GPBCLEAR.bit.GPIO60 =1;
4 H6 t+ Z; Q3 Y' g8 h1 {! k8 k2 GGpioDataRegs.GPBCLEAR.bit.GPIO61 =1;
1 f) P' w* {. J4 c! {GpioDataRegs.GPCCLEAR.bit.GPIO64 =1;
1 a; z$ z, }3 `: SGpioDataRegs.GPCCLEAR.bit.GPIO65 =1;9 e4 f+ R& X' H( D
GpioDataRegs.GPCCLEAR.bit.GPIO66 =1;
+ v0 S# {/ P9 n+ G, d: x8 h2 `GpioDataRegs.GPCCLEAR.bit.GPIO67 =1;
% G" ~  A* {. KGpioDataRegs.GPCCLEAR.bit.GPIO68 =1;4 w" a. G3 H* x' T5 z) C/ H0 t
EDIS;, _0 C2 |2 Q/ o$ V
*/6 f5 t( b7 W3 n: X/ V/ _. j

' m6 ~4 ]8 j1 F+ Oreturn 0;. k% S5 M  f7 G" `7 j" M
1
! [# Y8 q  y5 T1 v' ]- r}) R2 F: {0 G# L- \+ q
( l& c. Y7 b0 K( @4 ^' v% ~* X
void delay_loop()
& B1 {9 k4 ~) s1 Y0 V{
3 m2 u" P, j  g+ x- B6 wUint32 i;
/ l8 s7 a4 ?" T8 {+ ~. {Uint32 j;
) V, I( L" \. a/ Sfor(i=0;i<32;i++)* H$ R4 h: \; R$ L
for (j = 0; j < 100000; j++) {}
) O- I8 |; ^2 \- V' O" u2 I}4 K5 \, R/ C0 D  r9 b

+ U% T5 j  q+ n) M7 P' hvoid Gpio_select(void)2 T% r$ t, e" }, ]2 C9 D
{$ @0 x7 ~0 g& f9 B. v0 y
EALLOW;
% V) Y! h3 p5 [5 CGpioCtrlRegs.GPAMUX1.all = 0x00000000;  // All GPIO: B2 e* ~, [! b- ]8 a
GpioCtrlRegs.GPAMUX2.all = 0x00000000;  // All GPIO1 S0 Q! {% h  U0 \4 p
GpioCtrlRegs.GPBMUX1.all = 0x00000000;  // All GPIO
" }' Q3 w4 o9 F" Q% lGpioCtrlRegs.GPBMUX2.all = 0x00000000;  // All GPIO
( _' a, H4 \8 W2 l# e$ `8 z, VGpioCtrlRegs.GPCMUX1.all = 0x00000000;  // All GPIO
4 N: b+ v- q" f$ dGpioCtrlRegs.GPCMUX2.all = 0x00000000;  // All GPIO
; g0 ^0 _- B2 d- W% b5 a+ f
0 z( F( s$ D& u# a. W( u( e! b4 C5 [; {2 U
GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF;   // All outputs) `" L; V5 A2 T$ q4 w4 N3 ~# Y& b1 V
GpioCtrlRegs.GPBDIR.all = 0xFFFFFFFF;   // All outputs! t  t' \* e; E! O& p2 X6 e
GpioCtrlRegs.GPCDIR.all = 0xFFFFFFFF;   // All outputs
6 G' P' d- S0 u$ d  y( l: z" b, a1 u( ~$ G$ O$ x0 y+ \1 X! w7 ]
EDIS;) V& |4 [. n6 H' p

, q; Y. J. M; ], t' V" a: y}
8 D) ^: {/ a, q3 |& H: f3 v& ~0 b5 k: o6 i/ V( S
$ z5 S! c. F0 C% t8 F2 ~/ d

该用户从未签到

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-10-13 04:13 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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