嵌入式开发者社区
标题:
TL138_1808_6748-EVM使用GPIO模拟SPI不能是SIMO为低电平
[打印本页]
作者:
lmxcyx
时间:
2015-5-23 19:02
标题:
TL138_1808_6748-EVM使用GPIO模拟SPI不能是SIMO为低电平
使用下面的例子代码,不能使SIMO和CS为低电平:
" A) p4 l( ?& H/ m) C; ~) K# _! }3 D
void PSCInit(void)
6 X9 P* k* }0 P( ]' f' L
{
3 X+ ?- p, J* e3 A0 ?% t
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
. b" z* C6 ]& ~2 h! a
}
, j7 s! `' d L j9 ?6 d
- J! b( B* ?- W* r R! m
void GPIOBankPinMuxSet(void)
4 B. l, D5 M6 c4 D- r( v7 Z" K9 U
{
) l5 R' T2 @5 u# |
// DRDY ------------ GPIO6[14] -- 111
% c% G1 J/ w7 R- T0 m9 `
// SPI1_CLK ------------ GPIO2[13] -- 46
3 F2 t! O& K8 f: J* k. y f
// SPI1_SOMI------------ GPIO2[11] -- 44
9 |* K ?( u2 {& a
// SPI1_SIMO------------ GPIO2[10] -- 43
9 O( H2 r# P8 @/ E3 c* x/ H
// SPI1_CS2 ------------ GPIO1[0] -- 17
8 g2 i( L& C) X3 D# W" l; F
// SPI1_CS3 ------------ GPIO1[1] -- 18
6 N0 @0 \* D: ]! h& ?- f h4 d9 P" S2 c
; B- w& ^& X; V8 M! }
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(4)) = (0x88000000);
3 v& \& P. B6 M4 n6 }; G( F
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(5)) = (0x00880800);
9 x* Z; B' O+ w/ o2 s" C; A x1 u j
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) = (0x00000080);
8 Y& @+ a$ q- @& p2 U' X: R
3 ?/ e. j- P5 W$ _- Q# A
//DRDY
2 K+ J" a; J$ f" Z, W
GPIODirModeSet(SOC_GPIO_0_REGS, 111, GPIO_DIR_INPUT); // GPIO6[7] DRDY
4 N1 ?: F( }( R- G$ `
// CS2,CS3
. m, F R3 z, R" N% B) R0 S6 F
GPIODirModeSet(SOC_GPIO_0_REGS, 17, GPIO_DIR_OUTPUT); // GPIO1[0] CS2
$ b9 j) l% D$ n" ^1 ^
GPIODirModeSet(SOC_GPIO_0_REGS, 18, GPIO_DIR_OUTPUT); // GPIO1[1] CS3
4 F& X5 b. Q' D! Y
//SIMO
, [# w, R: F9 t/ Z
GPIODirModeSet(SOC_GPIO_0_REGS, 43, GPIO_DIR_OUTPUT); // GPIO2[10] SIMO
; H& _% D9 a a/ y
//SOMI
( L% n$ a9 I9 U' \: Y4 z. ]
GPIODirModeSet(SOC_GPIO_0_REGS, 44, GPIO_DIR_INPUT); // GPIO2[11] DOMI
5 v/ g4 }: q: Q7 W' x# n+ J
//CLK
& h6 u- K: D: v
GPIODirModeSet(SOC_GPIO_0_REGS, 46, GPIO_DIR_OUTPUT); // GPIO2[13] CLK
6 K0 n, z) ?' W$ x/ ^1 S; w
9 t0 g' C. q) P0 u
// LDAC
( d+ X' N6 f1 r+ H' c
GPIOPinWrite(SOC_GPIO_0_REGS, 46, GPIO_PIN_LOW); // CLK
/ G- ?- t+ o: D1 O5 m" o1 Y3 a
GPIOPinWrite(SOC_GPIO_0_REGS, 43, GPIO_PIN_LOW); // SDIN
+ F0 {% Z+ j9 j: l% w) Y2 |2 H7 o
GPIOPinWrite(SOC_GPIO_0_REGS, 17, GPIO_PIN_HIGH); // CS2
3 a( o0 J. f1 Z1 | d" s
GPIOPinWrite(SOC_GPIO_0_REGS, 18, GPIO_PIN_LOW); //CS3
3 [9 ~0 \ q7 |' q7 u: u
GPIOPinWrite(SOC_GPIO_0_REGS, 111, GPIO_PIN_LOW); //DRDY
" e! Z+ b6 h. f! x7 r& f% D
}
( J6 T& i' _+ o
$ o) i& H0 e- t- R
int main(void)
3 ], ^2 e, p- d! v# q+ v/ N, A
{
; ]' y% m5 C9 ]" t! U, v5 E' l
// 外设使能
# o8 u, p2 e5 I- N* @( ~4 e( }
PSCInit();
& ?$ {- h$ p4 ]5 y
; R0 I8 {% o/ u2 l! S
, g- l! H! F# y% ^
// 管脚复用配置
; y% q1 G# F6 z$ g/ X8 n/ }
GPIOBankPinMuxSet();
3 {& Q% I" }) p' a
for(;;)
, x2 F* O9 S$ {; p$ x7 _
{
4 l& G2 ^0 Z8 @1 m. `
SET_SCLK();//时钟正常输出
! \" L' j* T2 X _! P# U. D' l/ t
GPIOPinWrite(SOC_GPIO_0_REGS, 17, GPIO_PIN_HIGH); // CS2
3 k( D+ r3 S; Z; a$ `6 ]# n& C) d
GPIOPinWrite(SOC_GPIO_0_REGS, 18, GPIO_PIN_HIGH); // CS3
# T3 i* L+ p) r( Z
GPIOPinWrite(SOC_GPIO_0_REGS, 43, GPIO_PIN_HIGH); // SDIN
; t: X# `* W3 G: x" X( J; X
- O) ]! J( B) ]( ?
delay(20);
2 l9 @# @0 N# P# A8 `: q' M7 M' O
CLR_SCLK();
; \) y- R7 C+ d% o
GPIOPinWrite(SOC_GPIO_0_REGS, 17, GPIO_PIN_HIGH); // CS3
; b- F" r+ M* w- L: I0 T
GPIOPinWrite(SOC_GPIO_0_REGS, 18, GPIO_PIN_LOW); // CS3
( B& ?3 m8 X8 n3 ?+ ?
GPIOPinWrite(SOC_GPIO_0_REGS, 43, GPIO_PIN_LOW); // SDIN
: w0 X9 [3 R% a- z: g
delay(20);
/ F, ^' s# r& U, Q7 t
}
% e2 S* S: F+ D! `/ b! A
}
: K2 p$ X0 {# i* ^) p
作者:
Lewis
时间:
2015-5-25 14:26
这个GPIO的配置是没有问题的,在主函数里并没有使CS2拉低,其他的没有问题的
2 u ^+ F; P, i9 i$ a# L4 f/ l
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4