嵌入式开发者社区
标题:
TL138_1808_6748-EVM使用GPIO模拟SPI不能是SIMO为低电平
[打印本页]
作者:
lmxcyx
时间:
2015-5-23 19:02
标题:
TL138_1808_6748-EVM使用GPIO模拟SPI不能是SIMO为低电平
使用下面的例子代码,不能使SIMO和CS为低电平:
% B% }) Z& N: Q* |! C1 C
void PSCInit(void)
4 o$ x8 l1 I; n( h9 ]/ n, V( P% N0 R& v
{
6 K8 x- N, c' p; H
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
# s: N+ |" l" o. z
}
5 k8 B! I5 Z, r+ k$ k' d G
$ P% M% F6 S* v
void GPIOBankPinMuxSet(void)
* u, W {) p# [3 w% [
{
) s! e" J2 u a; |* C2 E
// DRDY ------------ GPIO6[14] -- 111
- l4 [ ?4 W/ F3 z
// SPI1_CLK ------------ GPIO2[13] -- 46
e% l' `& j0 g8 I) d6 X
// SPI1_SOMI------------ GPIO2[11] -- 44
, U' `1 f% e* N7 _; Z# o! O
// SPI1_SIMO------------ GPIO2[10] -- 43
; X8 A" a) O& O4 Z! B/ g3 O
// SPI1_CS2 ------------ GPIO1[0] -- 17
$ z3 i, A L7 f+ \0 W9 r+ C! j
// SPI1_CS3 ------------ GPIO1[1] -- 18
3 r- G7 N1 J$ h$ }
* l) W# T- _7 Z# ^+ K3 i
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(4)) = (0x88000000);
- z$ p- r) T4 W2 R. _
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(5)) = (0x00880800);
7 P/ u4 M7 N4 C5 v- s; Y s. a. P
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) = (0x00000080);
4 {3 T; N8 i8 r! S
6 i7 ^; t- F, F9 d& B
//DRDY
8 M+ D0 ^$ E' m; F: o* m
GPIODirModeSet(SOC_GPIO_0_REGS, 111, GPIO_DIR_INPUT); // GPIO6[7] DRDY
' b0 U( d/ G. L# B. |* @
// CS2,CS3
$ Z, t( b7 ~2 P2 i' h' Y: z# j4 S
GPIODirModeSet(SOC_GPIO_0_REGS, 17, GPIO_DIR_OUTPUT); // GPIO1[0] CS2
, z3 v9 ^. d# C/ Y% n
GPIODirModeSet(SOC_GPIO_0_REGS, 18, GPIO_DIR_OUTPUT); // GPIO1[1] CS3
$ J* L8 l8 o0 V% l9 N' p
//SIMO
% F0 ]8 \9 W j; ^
GPIODirModeSet(SOC_GPIO_0_REGS, 43, GPIO_DIR_OUTPUT); // GPIO2[10] SIMO
% j2 x9 O" Y2 L4 r- \" @ C' n
//SOMI
2 R# C" D/ {( O+ _
GPIODirModeSet(SOC_GPIO_0_REGS, 44, GPIO_DIR_INPUT); // GPIO2[11] DOMI
" y' m% ~; ~$ C7 ]5 S
//CLK
4 ]+ H& Z7 a3 W! i8 L2 H
GPIODirModeSet(SOC_GPIO_0_REGS, 46, GPIO_DIR_OUTPUT); // GPIO2[13] CLK
4 Q) [; S; q6 }% o6 ?4 R. C
# ~; B' r& l; u& H4 w
// LDAC
# ~% v6 F: G K. g
GPIOPinWrite(SOC_GPIO_0_REGS, 46, GPIO_PIN_LOW); // CLK
7 |- H1 _8 Y) L+ r( U+ W/ p$ `$ k
GPIOPinWrite(SOC_GPIO_0_REGS, 43, GPIO_PIN_LOW); // SDIN
2 v6 ^, B( Z2 A* f
GPIOPinWrite(SOC_GPIO_0_REGS, 17, GPIO_PIN_HIGH); // CS2
$ A+ c9 ~ Z5 U
GPIOPinWrite(SOC_GPIO_0_REGS, 18, GPIO_PIN_LOW); //CS3
& ^3 Y4 j. r, v v
GPIOPinWrite(SOC_GPIO_0_REGS, 111, GPIO_PIN_LOW); //DRDY
& S* k3 Z I: ^; R+ [
}
% K+ Z# `- V* z. [4 a
1 a" I9 s( Q9 v+ D- G! Z( w& s
int main(void)
( q4 o/ i/ w' u! m
{
b7 _3 l3 M" @, v- o/ a3 Y
// 外设使能
' c/ n& r9 {8 P3 ^6 s7 b
PSCInit();
; {3 L5 t" D+ U& r. y; M4 J9 G& j
9 U+ {8 n- `4 [4 K8 k# \
+ [, f, r# y$ i n
// 管脚复用配置
8 [0 b3 J: P% D7 F' E3 I* V) u
GPIOBankPinMuxSet();
0 j( B% M' M. O0 P7 N2 R
for(;;)
2 |: u9 E3 v5 J! n# `3 _9 m
{
/ Z7 X/ E, K) G5 Q, F* V
SET_SCLK();//时钟正常输出
1 R. x% T; \% N r$ k( F. P2 p& W
GPIOPinWrite(SOC_GPIO_0_REGS, 17, GPIO_PIN_HIGH); // CS2
+ ` t: }0 H# j: g, B
GPIOPinWrite(SOC_GPIO_0_REGS, 18, GPIO_PIN_HIGH); // CS3
" e& v; B, K& [1 F, x8 J* ^
GPIOPinWrite(SOC_GPIO_0_REGS, 43, GPIO_PIN_HIGH); // SDIN
3 P# A, b; G+ A3 }: h" w
( C: j0 V& d% F1 m$ t
delay(20);
; k. j5 \9 I% [6 m, @" t
CLR_SCLK();
' p) e& U" s$ F8 S
GPIOPinWrite(SOC_GPIO_0_REGS, 17, GPIO_PIN_HIGH); // CS3
; K! s1 B5 v8 |7 K, N( l
GPIOPinWrite(SOC_GPIO_0_REGS, 18, GPIO_PIN_LOW); // CS3
5 D* f: h& O& |2 {
GPIOPinWrite(SOC_GPIO_0_REGS, 43, GPIO_PIN_LOW); // SDIN
/ r+ P9 \) n+ t
delay(20);
' n$ a' z# E5 m/ f6 c, S U
}
6 l% B6 N* A3 E ^
}
9 x" \$ m; ~$ v
作者:
Lewis
时间:
2015-5-25 14:26
这个GPIO的配置是没有问题的,在主函数里并没有使CS2拉低,其他的没有问题的
- z: T* A5 h( M* r9 h9 @
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4