找回密码
 注册
关于网站域名变更的通知
查看: 389|回复: 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口同样也能被配置为外部接口。2 Y& x; {) A8 w
这样涉及到了IO的寄存器,IO口共有三类寄存器:
. v: I  W' t- h, y' d控制寄存器、数据寄存器和中断控制寄存器。  n8 K3 _  T0 g, r! W
1、 GPIO可以配置为数字I/O或外设I/O口,GPxMUX1(2):‘0’为数字I/O,‘1’为外设I/O口;& U, l3 T+ U4 \/ z
2: GPIO可以配置为内部电阻上拉功能,GPxPUD:‘0’为上拉,‘1’为禁止上拉
; u! w1 i, b4 G5 ~' B3: GPIO具有数字滤波功能,GPxQSEL1(2):量化输入寄存器,可以确定是3周期采样
0 ]! t1 A2 N6 e/ L& T还是6周期采样或者不用采样;' K* I! D4 P0 v* d1 ]
GPIO可以配置为内部电阻上拉功能,GPxPUD:‘0’为上拉,‘1’为禁止上拉,
7 x* q# z& d0 e" @! X1 G' C; r: J3 N' b$ o# Q& ~9 [9 F: ]  N
4、 输入输出可配置,GPxDIR是控制每个引脚的输入或是输出,‘0’是输入,‘1’是输出;
2 z* Y" ]8 `7 g6 _( c当GPIO配置为数字I/O时注意:$ b) H# E' l' w! K7 G: ~' r9 {
1)28335引脚作为输出时,虽然可以通过设置GPADAT或GPBDAT改变输出端口的高低电平,但是单独写某一位时可能会使其它引脚产生误操作。为了避免这种现象的产生,改变输出引脚的高低电平时,应该使用GPIOxSET(置位),GPIOxCLEAR(清零),GPIOxTOGGLE(反向,可以代替去翻操作)寄存器载入输出锁存寄存,GPIOxDIR配置方向,1为输出,0为输入.
0 _# u* l" z4 G) J2)当使用GPADAT的时候,一般是在初始化中,在函数中使用需要添加延时,否则可能达不到预定的输出状态。使用GPIOxSET(置位),GPIOxCLEAR(清零),GPIOxTOGGLE(反向)电平会立即变化,无需添加延时。
: v9 s% T7 V4 nGPIOxSET, GPIOxCLEAR, GPIOxTOGGLE仅仅等于1时才有效,等于0无效
' S9 ?2 y6 R9 t* j
9 S) R) U( B) D. A0 h5 i以下例程是针对野火DSP28335开发板的程序,已经验证。
8 f; b9 G% `; G& x  X; T#include “DSP2833x_Device.h” // DSP2833x HeadeRFile Include File
5 q3 h) \( x" D; f/ `#include “DSP2833x_Examples.h” // DSP2833x Examples Include File
) a# Q% \/ h0 A5 ivoid Gpio_select(void);
( a) i: |0 h! y: E) g0 |void delay_loop();
8 N2 {9 z0 Q4 A! B9 ^  mint main(void) {
& s1 ?) D! U3 f# \5 b3 }2 g- J. |$ vMEMCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
2 I" \& x4 v7 xInitFlash();" o8 B6 ^0 U+ z+ o
2 O( V4 S* f/ a# Q# P- o1 u/ y8 P
InitSysCtrl();
: ^' b# I! u$ ]) a0 W! F- j6 [+ V" A( q- G1 ?3 Q0 Y
Gpio_select();//GPIO 初始化
. |# x% ~0 z5 n/ t0 T# Z- f; B. ^( a5 }& |
// 步骤 3. 清除所有中断初始化中断向量表:
) q! H+ ]4 \  s( q$ _2 }// 禁止CPU全局中断
( y+ j. I, u  v& X; lDINT;! D$ Y1 q) u* G( i1 Z
// 初始化PIE控制寄存器到他们的默认状态.4 A5 H7 k$ C$ n1 D$ F! @2 b
// 这个默认状态就是禁止PIE中断及清除所有PIE中断标志
5 N1 U7 J$ k8 N  u/ \// 这个函数放在DSP2833x_PieCtrl.c源文件里$ t1 x/ w) D7 K! Y
InitPieCtrl();% s, Y( o8 `/ h/ C9 E* z
// 禁止CPU中断和清除所有CPU中断标志
/ V% a( U  i0 |& H7 ^$ |IER = 0x0000;9 e' N: n- f/ M2 m8 a1 [+ `
IFR = 0x0000;% Z! M) A0 O  q

4 l- u  @7 l( O5 b& _, D5 }0 N//初始化PIE中断向量表,并使其指向中断服务子程序(ISR)
. t0 x# g3 F. ?- E' ]+ @3 T// 这些中断服务子程序被放在了DSP280x_DefaultIsr.c源文件中" G4 K4 G  }/ d% {; U% @# c8 r
// 这个函数放在了DSP2833x_PieVect.c源文件里面.7 D5 c# n; A& t3 W6 p. k3 C
InitPieVectTable();
. X$ I3 ~3 p" ?: |6 k6 w3 m! m8 w: P+ v7 }
GpioDataRegs.GPBDAT.all    =0x00000000;//第28、29位为低电平LED灯亮- i5 G! u% g1 i# O$ j- r, |
GpioDataRegs.GPCDAT.all    =0x00000000;//第0 -4位为低电平LED灯亮
( t0 s, Q* c) d8 L/ Qdelay_loop();
$ k+ K: M/ e9 z+ V( J9 O% w! ?delay_loop();
) w4 l( Z+ r% B# d5 m* m6 w
% G% f5 [3 w- |) N8 [+ S& [1 _// for(;?
4 W, l7 P- N5 A" ^, v  O  b% e! _+ g7 u- s8 Y6 M
while(1)8 F7 C2 Q. G  Z6 K
    {
- F% i3 {! p) ~2 i       delay_loop();  //延时! \" D  ]7 y3 g) {" B$ A, ~& V
       GpioDataRegs.GPBTOGGLE.all =0x30000000;  //电平翻转
+ Z+ u1 N5 F. s       GpioDataRegs.GPCTOGGLE.all =0x0000001F;  //电平翻转2 l' @* |5 W- C  ~3 j4 ?
    }. u# _: c: M& l8 T
  y$ y1 h6 w0 Q' x/ d
/*! I% Q: U6 @- q
EALLOW;
0 B% L5 L. W* D  m$ l. U# w// 把LED灯熄灭
* b+ K+ _& A0 s8 W8 e! RGpioDataRegs.GPBSET.bit.GPIO60 =1;3 `+ k: A# b, |9 n  a( B" u
GpioDataRegs.GPBSET.bit.GPIO61 =1;7 t) c" ?. g, M# r; X
GpioDataRegs.GPCSET.bit.GPIO64 =1;$ ?$ k' p, j) w  O5 T& {& X& [* F7 U2 x
GpioDataRegs.GPCSET.bit.GPIO65 =1;
. s; M2 B2 k) S% oGpioDataRegs.GPCSET.bit.GPIO66 =1;
2 H9 v* g: G8 R% v, {( WGpioDataRegs.GPCSET.bit.GPIO67 =1;$ L& Y) U! }9 `4 }
GpioDataRegs.GPCSET.bit.GPIO68 =1;
8 r  |% c* H. L) D  T1 lEDIS;
) ~* J8 C( I6 Q6 S7 G# V( {
# Q' v: ~, [3 u- V& D1 b   delay_loop();
4 u) B, X! [' T' ^1
1 |! H0 b8 }% @* M$ K% ]: ^/4 _( Y( |3 {& |1 E+ w# J
// GpioDataRegs.GPBTOGGLE.all =0x30000000;+ Q) b; ~' T5 [8 z+ W0 W, v, U, h0 f9 `
// GpioDataRegs.GPCTOGGLE.all =0x0000001F;7 q8 k: F' S; k9 ]6 {4 o
/ EALLOW;
+ r5 \0 q: e% t  @  v$ n% U. U! ~. t// 打开LED灯6 s) y8 }' B  i
GpioDataRegs.GPBCLEAR.bit.GPIO60 =1;
, `" v8 E. O5 t3 f# H/ jGpioDataRegs.GPBCLEAR.bit.GPIO61 =1;
# N8 f$ ~/ @/ p: l8 F. ?* vGpioDataRegs.GPCCLEAR.bit.GPIO64 =1;
0 R- t/ \. i, Z  y. r' B8 t; vGpioDataRegs.GPCCLEAR.bit.GPIO65 =1;5 o* T& v9 H+ k8 ]
GpioDataRegs.GPCCLEAR.bit.GPIO66 =1;
: I- @* F. X2 v# ]( e# d- a3 yGpioDataRegs.GPCCLEAR.bit.GPIO67 =1;
" a5 Z, o0 N- Q. y( bGpioDataRegs.GPCCLEAR.bit.GPIO68 =1;7 P' C" d% y) t* }6 r
EDIS;
! R8 P5 e  C+ l% m. u4 W*/. x# H! Y1 B- j! A# c
! c! j2 ?) J4 p
return 0;  t9 d# i# g5 c
1
3 e% H* U- B  y" N}
% K& z6 ~4 D" p! }, \5 E  [5 F) i
  Q! [" k& _2 S8 Q# rvoid delay_loop()9 Q: [/ }' p+ V# p
{
: u' R6 d- h! x" }0 Y, tUint32 i;
4 }; I1 O; ~3 b" z" v# bUint32 j;
7 |$ B/ {% H: S  J1 c6 o' D# Dfor(i=0;i<32;i++), [+ R) P% W  m: x
for (j = 0; j < 100000; j++) {}& x) x* o, G8 u7 T+ {! E# {
}9 Z5 I8 y0 |# J3 i% g1 @

( x, M  f0 t$ d- t3 a$ B, Qvoid Gpio_select(void)" v- e. A! Q3 c6 L; ~) @4 r
{' N* o+ Y" S- ?$ O$ c6 T
EALLOW;
% H2 n# t. F4 U8 h3 L7 eGpioCtrlRegs.GPAMUX1.all = 0x00000000;  // All GPIO* X3 Q0 b3 s9 a! t$ q# j6 e- c+ q
GpioCtrlRegs.GPAMUX2.all = 0x00000000;  // All GPIO4 M' g# Q7 A! f6 q: f
GpioCtrlRegs.GPBMUX1.all = 0x00000000;  // All GPIO( o5 X3 D& u# ~2 V
GpioCtrlRegs.GPBMUX2.all = 0x00000000;  // All GPIO* ?: C2 y1 T0 c* K' G0 U0 {  d' G
GpioCtrlRegs.GPCMUX1.all = 0x00000000;  // All GPIO
6 N# w) N# k: W, I, {' v4 e, a$ {* d0 jGpioCtrlRegs.GPCMUX2.all = 0x00000000;  // All GPIO6 Y8 p4 B4 |& [( b0 ~# N" T  h

/ y% g: G+ L- Z  C$ Q# M4 v5 S3 b) A7 O3 E
GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF;   // All outputs
- S$ K: S& D" S9 MGpioCtrlRegs.GPBDIR.all = 0xFFFFFFFF;   // All outputs6 J# S" j: B, n# T0 ]# B! J
GpioCtrlRegs.GPCDIR.all = 0xFFFFFFFF;   // All outputs
& w3 q3 V' \6 }7 H  i
7 H- V5 ]; g$ MEDIS;
% k$ X( D. d- G! F4 D; _9 k0 J, i
}) b9 g& `% e# I9 R

, Z6 J0 |* T& k0 ]1 B; p& x( D+ ^/ E" W/ T5 j

该用户从未签到

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-23 21:44 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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