嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; S. [$ B/ R# O, r2 x1 T+ C
Void UPP_TASK(Void)
: m0 c* V/ D7 X( g7 A( M
{
' t4 c3 }9 K% Z# W/ o) S
5 ~. G: w) |7 e" a
int i,j,k,target_int_count=2;
2 [+ e5 N2 t F/ A1 x
char ch[2];
4 S. N4 y9 o& t: u
7 e0 N& ^: X3 ^9 e1 } N/ F, z# D
& A H/ R0 @3 S& o0 X
/ [9 o$ D; j4 _7 o
upp_interrupt_count = 0;
8 B" z6 |3 k3 p+ O# d; K2 E; o* r# ?# O
upp_error_count = 0;
( W' H4 x- L8 L0 |, R6 b
6 {7 u q3 O2 Z; B
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& w8 W0 Q' _8 U3 j
// Initialize data buffers
% A @" |$ q$ x& h' n
for (i = 0; i < upp_frame_size; i++)
6 P' q4 x' q) b) W8 L5 {; ^
{
e) ~2 w Q$ A& F7 l' j
upp_buffer_b
=i;
4 n" c# K5 h D
upp_buffer_a
= 0xDEAD;
9 b8 `7 l/ v8 E& d/ y3 \5 A4 d
}
) E0 X, ^$ N5 j
' O0 c9 B; J, B) _+ V' \4 S: G1 t
//for(i=0;i<1024;i++)
" Y9 n4 W( w& J) @
// temp
=0;
9 G: y" X) V9 H0 h
# y0 E7 v* m. H) t- w# @# Z
//UPPReset();
2 s3 ^+ }$ _8 a) d5 } K
/*启动UPP DMA传输*/
L" ^0 z: O0 }- n6 \0 L
UARTPuts("upp_prog_dma_i\n",-2);
c- k7 ]4 \. d& r
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
5 L$ m; B3 A; a& ^! V: ]" G
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 f( ~. v* l* m" T" T
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 X* j9 I1 Y" O9 a( [6 n
% X, W0 B& l$ t- f L: O
UARTPuts("upp_prog_dma_i\n",-2);
$ f$ I7 m$ t7 {& w8 V6 ^ S
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. `# r& a1 W1 m3 @
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, Y7 }7 r$ f. H# `! J
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; N" ` t. N2 X$ B2 ?7 i" z
7 p* `- F) A; Z T7 P
/*等待UPP传输完毕*/
$ w, i3 V4 j5 j: {% X9 H
//i=0;
9 o+ n4 v0 x. C6 R. _9 U
//j=0;
. E- Z7 f% h' u2 z w' d
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 N; E! m. \; c7 o' j; Y$ W& U0 a. ?; J" x
{
1 K' d+ r. T9 q! m$ L% R; W
/* 测试UPP传输的同时操作普通DDR数据
% {* F0 x2 ?" z* q3 T& {: P
temp
=i;
( T" K- Z3 \9 x6 Q5 z# J
i++;
# |) w8 E. d* C4 g
if(i==1024)
7 l: K+ N2 ]9 i2 G8 B. {4 g
{
& J, M4 E- t2 `: P) R I% J
i=0;
! @/ |& t) }; Z" O, L$ W: ]! s
j++;
) `* S& u4 o+ l( F
}
; S I7 ?( P5 \0 x% @
*/
, J- ~; f' ?; Q7 q d
9 z! h) s- |+ \; m
asm(" nop");
0 P8 o6 T# u$ ?2 g3 w. t4 u4 z
2 f6 C2 p) W8 a6 C( O/ ^
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' o- q9 ]8 ^$ p0 d. F9 V
}
+ l6 @! v- ^# ~: ]* I% S! i
4 I# \) I3 p+ p" P1 d) d9 @
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# ?- z7 \5 R; C* e0 c2 @3 j* U& r5 ?
//UARTprintf( "i=%d\n",i);
w8 R. a+ }0 m) }- c: d' H) L
//UARTprintf( "j=%d\n",j);
^, s0 f" ]7 z1 {4 h+ U4 W
UARTPuts("Data mismatch in buffers.\n",-2);
; D8 f; a) O( C3 I) O
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 d3 A+ a" v- k6 H
{
5 S+ e" `) k! T% k p$ d, T
for (i = 0; i<upp_frame_size; i++)
! u. D# V" m/ C0 {) K4 \+ r6 C( o
{
5 g; b; D* F4 L& R
if (upp_buffer_a
!= upp_buffer_b
)
* B/ J1 f0 G, S% f+ G/ L
{
+ i* U7 v4 u( \7 p- k# ], M; J% ^
upp_error_count++;
8 p# l8 u% z w' o+ W" m( u7 S
}
. Z$ T4 C# K5 ?
}
$ V2 C% U% b- ]
}
6 f% [8 ~* t. F* r& ]
" f% [. V0 i; u
/* 报告通信结果*/
. c; `3 u: F/ M0 H
if(upp_error_count != 0)
: z# o" i) _7 D6 q8 ]" N% W
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. G$ N3 ^7 F6 J! p
else
G3 x3 h7 G2 ~; h* K+ y' D$ x2 ?6 I
UARTPuts("uPP transfers complete!\n",-2);
9 r7 t* q2 k! n+ m5 m3 k0 P
: ~7 q/ p" m, H/ C
UARTPuts("Do you want to print all the data?(y/n) ",-2);
" E7 L1 f6 }$ U
UARTGets(ch,2);
/ R1 j) C9 W% `1 Z0 h
UARTPuts("\n", -2);
" V7 N) q' V- I C7 h+ n# q' X/ T
1 ` O, h, Y5 a% j; I1 u2 P
if(ch[0] == 'y')
: X% x0 k/ N* E, C
{
# U# O8 ?4 c+ D) [/ }: q& {; }
/*打印全部读到的数据*/
9 p- ]' s, n4 N6 \9 s( L
for(i=0; i<upp_frame_size; )
: T; J! }6 ?1 A8 v
{
9 W; M3 d4 B$ O
for(j=0; j<5; j++)
" v* v7 M' Z& B6 [1 |+ Q) P
{
: C& r8 m0 |: G7 e C% I, r
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
1 P+ T$ b. S) u$ O3 i
i++;
4 H( o( C4 c. {
//if(i >= 4096)
0 V! G$ U; `% U3 `7 i% H
// break;
% }5 N4 W, s! }+ S8 O$ h q- d
3 _+ ~% ~% X0 e4 ^7 i# s, _
}
) k v5 e. f' _+ j1 g. u7 F* i
UARTPuts("\n",-2);
# c6 d( n9 R; q, s/ N
}
. g7 v2 h5 E1 |+ S# l6 t! k, S
}
" k: s d' b* p6 i
- t6 x9 d& W1 @: v. c$ x
}
% d9 w) e8 n3 t
1 \- ]- V* M1 }( t: W+ Z- H4 n W
6 h4 i5 f, ]& e+ \. i# e
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( v/ B+ `" g0 R* o" Q5 P* F
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* r( ~' B. T+ w7 G' K; d# V$ S5 G
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4