嵌入式开发者社区

标题: 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( Qvoid 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( `: ], O5 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] -- 437 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); //DRDY7 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); // CS33 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