嵌入式开发者社区
标题:
TL138_1808_6748-EVM使用GPIO模拟SPI不能是SIMO为低电平
[打印本页]
作者:
lmxcyx
时间:
2015-5-23 19:02
标题:
TL138_1808_6748-EVM使用GPIO模拟SPI不能是SIMO为低电平
使用下面的例子代码,不能使SIMO和CS为低电平:
9 E0 Z2 p, `7 t- x) Q+ r, F; P( L. m( Q
void PSCInit(void)
: Y. ~% {# Z: i8 w' l' J0 p, k
{
) ^; ~6 x5 Q B6 F. a" U
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
+ r0 h7 a; I3 v ^ j5 ~
}
4 J+ F" C+ p( `: ], O
5 X- ~1 T* l0 x) X+ u' S
void GPIOBankPinMuxSet(void)
) |+ S/ i% g+ H# y) _% O
{
4 d; H d# R8 S
// DRDY ------------ GPIO6[14] -- 111
Y! t' l* i$ g ~ {& f' h
// SPI1_CLK ------------ GPIO2[13] -- 46
4 g8 L7 o2 J% g# a
// SPI1_SOMI------------ GPIO2[11] -- 44
; @3 ^5 L8 N% r% F
// SPI1_SIMO------------ GPIO2[10] -- 43
7 b% C J8 [7 z9 E3 x: K* c
// SPI1_CS2 ------------ GPIO1[0] -- 17
' ?* n: I7 Z: g- i
// SPI1_CS3 ------------ GPIO1[1] -- 18
( f X/ k& o4 N, G/ w- W
4 O, H( i9 K1 r. o W
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(4)) = (0x88000000);
. s, \$ H6 S, g% D
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(5)) = (0x00880800);
9 F9 n- e: d! g+ y. {/ q+ N! Z7 R
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) = (0x00000080);
- N6 y F1 s5 J: [
9 ^. s, l3 }7 j
//DRDY
2 [0 M3 v4 b/ f2 k( |' M
GPIODirModeSet(SOC_GPIO_0_REGS, 111, GPIO_DIR_INPUT); // GPIO6[7] DRDY
/ f# v l* w6 \; O
// CS2,CS3
3 Q) f, q+ V. g
GPIODirModeSet(SOC_GPIO_0_REGS, 17, GPIO_DIR_OUTPUT); // GPIO1[0] CS2
/ r; e7 Z0 Y! [7 U p/ I6 D
GPIODirModeSet(SOC_GPIO_0_REGS, 18, GPIO_DIR_OUTPUT); // GPIO1[1] CS3
3 w$ F" s3 m4 [! o8 f6 S
//SIMO
+ {' |/ f; z9 Y: q- `
GPIODirModeSet(SOC_GPIO_0_REGS, 43, GPIO_DIR_OUTPUT); // GPIO2[10] SIMO
! G5 C3 [' {( \" u+ h1 |( p- x, v
//SOMI
* R. ^ H6 G$ p+ u' E
GPIODirModeSet(SOC_GPIO_0_REGS, 44, GPIO_DIR_INPUT); // GPIO2[11] DOMI
# G5 Q/ h: f1 A2 `
//CLK
; U4 C$ V* I* b: h0 b. @" M
GPIODirModeSet(SOC_GPIO_0_REGS, 46, GPIO_DIR_OUTPUT); // GPIO2[13] CLK
, k' e z, j8 j" ^
& E% `5 u5 J- ]6 {+ ~" Z" w3 B* ?* l
// LDAC
1 c4 G+ I0 ^: ^6 }/ s
GPIOPinWrite(SOC_GPIO_0_REGS, 46, GPIO_PIN_LOW); // CLK
' y+ |. s: ^, J0 n5 T
GPIOPinWrite(SOC_GPIO_0_REGS, 43, GPIO_PIN_LOW); // SDIN
( e% G9 o2 D( `" ~5 R
GPIOPinWrite(SOC_GPIO_0_REGS, 17, GPIO_PIN_HIGH); // CS2
& L6 b. m# s. \' _+ R
GPIOPinWrite(SOC_GPIO_0_REGS, 18, GPIO_PIN_LOW); //CS3
% N% \5 Q p3 ^$ @
GPIOPinWrite(SOC_GPIO_0_REGS, 111, GPIO_PIN_LOW); //DRDY
7 i8 D' E3 B7 a
}
9 E! b% ]$ L$ p
" s6 s4 G: R, i) i+ v- Y# Y
int main(void)
/ y- S. }! \ t) B, r
{
+ j" a& Z! C; A% n
// 外设使能
$ `) M; q, Y. {
PSCInit();
* R: _) V( T7 f3 ~% z
" ^; c& @, J d$ W" b, G( u+ h
) x) x% U, F" p% c2 N- I4 O* m
// 管脚复用配置
' N; b" H7 d0 @
GPIOBankPinMuxSet();
# S7 v, ?0 j- b; R3 B) i
for(;;)
2 p' D4 c4 y8 o1 b5 A
{
" |9 M! k! ^' x0 h3 o
SET_SCLK();//时钟正常输出
; f5 c# e$ n" Q) B4 \2 [8 O, ^) U
GPIOPinWrite(SOC_GPIO_0_REGS, 17, GPIO_PIN_HIGH); // CS2
: L+ ?& Y9 o; d
GPIOPinWrite(SOC_GPIO_0_REGS, 18, GPIO_PIN_HIGH); // CS3
; v6 `( k1 t) g# W, v
GPIOPinWrite(SOC_GPIO_0_REGS, 43, GPIO_PIN_HIGH); // SDIN
* o3 _: O$ s6 T
G1 _; r+ }5 d7 x2 r/ @
delay(20);
1 @: N+ y% k3 f& y+ K
CLR_SCLK();
2 o& }; |* h, o1 B# v6 d8 L k$ j
GPIOPinWrite(SOC_GPIO_0_REGS, 17, GPIO_PIN_HIGH); // CS3
4 U& y: Q) U) J" J/ V8 p
GPIOPinWrite(SOC_GPIO_0_REGS, 18, GPIO_PIN_LOW); // CS3
3 m( Y8 m* m6 ~
GPIOPinWrite(SOC_GPIO_0_REGS, 43, GPIO_PIN_LOW); // SDIN
: S4 E5 W% P8 x0 O8 B' Z
delay(20);
' p3 Q8 ?# t! @9 M' |* a( ?: I' G
}
$ X I1 I$ M' F# E1 o
}
* O- X# S; \& b; x. d# u# @) L9 }, E" U
作者:
Lewis
时间:
2015-5-25 14:26
这个GPIO的配置是没有问题的,在主函数里并没有使CS2拉低,其他的没有问题的
* f0 f& D3 v" t% J
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4