嵌入式开发者社区
标题:
TL138_1808_6748-EVM使用GPIO模拟SPI不能是SIMO为低电平
[打印本页]
作者:
lmxcyx
时间:
2015-5-23 19:02
标题:
TL138_1808_6748-EVM使用GPIO模拟SPI不能是SIMO为低电平
使用下面的例子代码,不能使SIMO和CS为低电平:
; F* u, u F9 M
void PSCInit(void)
# Z3 ~: L0 I- L7 ]; ^
{
: m6 _5 h* }" z* K
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
$ v" @! o& ?! \) K6 F6 u
}
2 ~: a$ F+ B, N, p+ A2 s
, G# s1 ~7 [4 Y% x
void GPIOBankPinMuxSet(void)
6 S/ ]/ J- X; y' c" W' L
{
( W/ A, x9 L& ?' r& F
// DRDY ------------ GPIO6[14] -- 111
* u" g' @2 V! i* _: }1 C
// SPI1_CLK ------------ GPIO2[13] -- 46
0 W* \" T5 K! ~9 B
// SPI1_SOMI------------ GPIO2[11] -- 44
, o+ [1 T+ m6 |( r5 |: z; j
// SPI1_SIMO------------ GPIO2[10] -- 43
( U: N2 {+ i2 z
// SPI1_CS2 ------------ GPIO1[0] -- 17
. T2 D9 B5 {, \9 f# |4 a) A
// SPI1_CS3 ------------ GPIO1[1] -- 18
/ g2 {# V- b. ^8 ~4 Z( w0 I
* M$ N/ _& P1 c/ g5 Z5 K) [
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(4)) = (0x88000000);
$ J* ~# |" t3 D; s6 b9 w; z
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(5)) = (0x00880800);
4 |- v% M4 P$ v
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) = (0x00000080);
4 L, d: E: ]+ o" l
7 d4 p; ^- d; s7 D! V
//DRDY
8 {; q, P' R% [- R. K% t# \( R
GPIODirModeSet(SOC_GPIO_0_REGS, 111, GPIO_DIR_INPUT); // GPIO6[7] DRDY
$ O- F7 o3 N- O
// CS2,CS3
- A, t2 S7 Y: C5 V. L6 ~; `
GPIODirModeSet(SOC_GPIO_0_REGS, 17, GPIO_DIR_OUTPUT); // GPIO1[0] CS2
$ Y% K' F3 m6 Q, `3 v
GPIODirModeSet(SOC_GPIO_0_REGS, 18, GPIO_DIR_OUTPUT); // GPIO1[1] CS3
) v& G6 O( [# E& X
//SIMO
9 ^/ k, Q. b d1 F. L- u
GPIODirModeSet(SOC_GPIO_0_REGS, 43, GPIO_DIR_OUTPUT); // GPIO2[10] SIMO
; u, \9 H4 n O1 H3 z
//SOMI
( [7 [$ v' x5 Y5 k+ d0 l
GPIODirModeSet(SOC_GPIO_0_REGS, 44, GPIO_DIR_INPUT); // GPIO2[11] DOMI
, J% L+ g2 m( K. n1 M" |; X. R0 S
//CLK
7 H0 L/ u/ {2 S1 u
GPIODirModeSet(SOC_GPIO_0_REGS, 46, GPIO_DIR_OUTPUT); // GPIO2[13] CLK
9 G# H; U5 f: ~. k0 {
: Y- Z0 q/ N# P- x6 {4 x* ^
// LDAC
. h. ~. j5 D9 v% \2 x% N
GPIOPinWrite(SOC_GPIO_0_REGS, 46, GPIO_PIN_LOW); // CLK
- D2 z$ D, R+ G% Y& j' Z" x
GPIOPinWrite(SOC_GPIO_0_REGS, 43, GPIO_PIN_LOW); // SDIN
& t* z6 u$ D% y
GPIOPinWrite(SOC_GPIO_0_REGS, 17, GPIO_PIN_HIGH); // CS2
( I8 I& @8 t5 {" y" j% u
GPIOPinWrite(SOC_GPIO_0_REGS, 18, GPIO_PIN_LOW); //CS3
' ?: g5 p. ^6 L6 V7 @9 i! Q
GPIOPinWrite(SOC_GPIO_0_REGS, 111, GPIO_PIN_LOW); //DRDY
# V: R8 A7 _$ m& V% d8 e
}
! ~- M0 o6 r c; \$ `( u+ `
) F* N* o5 r% p; o. u1 H6 l& d
int main(void)
4 N' w& ]7 j3 a" S
{
& Z* R% E# z, G8 x1 _" j! p
// 外设使能
z+ |, a4 Z9 m3 q! s/ m2 p/ c' e
PSCInit();
' k7 r3 ]6 x+ m- k T: f
7 Y% Q$ h1 ?& A& g; n
1 w1 E" s, `, |+ J: D
// 管脚复用配置
3 K0 g% N; n- I) ~6 _3 D
GPIOBankPinMuxSet();
! e% K1 L& p: P/ R# h7 F
for(;;)
) ?& J& f7 _) p" [
{
4 M) P7 r1 q2 x5 X- U5 x2 e. B
SET_SCLK();//时钟正常输出
7 t2 C9 N, P, u1 g* o. S
GPIOPinWrite(SOC_GPIO_0_REGS, 17, GPIO_PIN_HIGH); // CS2
1 K+ n( i/ ?% w0 W
GPIOPinWrite(SOC_GPIO_0_REGS, 18, GPIO_PIN_HIGH); // CS3
a: W5 ~ z4 N# q& x5 F- Y
GPIOPinWrite(SOC_GPIO_0_REGS, 43, GPIO_PIN_HIGH); // SDIN
9 I) L$ ^& x% y' G: k
# T( s3 V* {$ o
delay(20);
S' i1 L; C+ F$ F; }
CLR_SCLK();
# F, o5 U* {$ f' M* p
GPIOPinWrite(SOC_GPIO_0_REGS, 17, GPIO_PIN_HIGH); // CS3
; H6 @4 i, l4 i5 l$ u, k, l- r. ?
GPIOPinWrite(SOC_GPIO_0_REGS, 18, GPIO_PIN_LOW); // CS3
2 X2 T2 C" B5 }6 Z
GPIOPinWrite(SOC_GPIO_0_REGS, 43, GPIO_PIN_LOW); // SDIN
9 _ F* g6 p) R
delay(20);
+ e: S+ `7 L# M$ F' b1 d3 S1 i
}
4 K/ `4 O3 q4 }7 g% g2 G4 M( f3 ^
}
5 D# n* j3 k. n# b! m; N! [4 B L
作者:
Lewis
时间:
2015-5-25 14:26
这个GPIO的配置是没有问题的,在主函数里并没有使CS2拉低,其他的没有问题的
" l; T' W; M* F4 y# G) T
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4