嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 i" e! l# e0 p+ N% L
Void UPP_TASK(Void)
0 q) w2 M5 n# {" L+ p0 v1 b* ^
{
- v) E( a( w C
. o/ O3 y/ s2 @7 j/ u A! f! ]5 F
int i,j,k,target_int_count=2;
2 [+ w- h) g. a9 l+ K1 P' H! [7 s6 L% J; p
char ch[2];
& z' D( J1 _0 g! }: x) P% [
/ ]" E' I7 Q$ E. p
8 p; l4 R* ~' C- e- R
; [& F+ s5 v7 X5 x! l3 G4 p
upp_interrupt_count = 0;
7 j3 ]) G1 y0 Z4 N+ a. {! M
upp_error_count = 0;
: K* I* c( }/ s6 R
0 }: Y- T" I: p% ?: T7 w
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* X) x8 O4 A+ r9 y
// Initialize data buffers
7 [+ S, T2 n) Q, X* n
for (i = 0; i < upp_frame_size; i++)
2 i; y7 {8 c2 D& x8 c( r
{
* d( M0 W* L6 u6 b
upp_buffer_b
=i;
6 o3 x( i" l, Y
upp_buffer_a
= 0xDEAD;
0 Q- z) c& }* W* f
}
. G1 j+ T8 r, s: R( |, n! _& c
8 ?0 ]% m8 b7 t% f, ~; p% J
//for(i=0;i<1024;i++)
- p" r) K, k& f$ [4 Y0 D/ ?8 v1 j
// temp
=0;
; g+ D% T2 A& V, w, a8 e% D
# A7 v1 }' I& x1 ?6 l8 m
//UPPReset();
2 _& D x v- I7 i. i. G
/*启动UPP DMA传输*/
( W' L. Y" a. h5 }# [: N# D: Y
UARTPuts("upp_prog_dma_i\n",-2);
% m9 w$ Y) {2 u1 G
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: A5 C9 v6 a* v4 r
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 @% H7 c- E3 i) n7 O
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 o& s* L3 H5 J9 P( k( M
2 _: M5 C& p9 k7 j% q5 s5 X7 J w
UARTPuts("upp_prog_dma_i\n",-2);
1 N7 t/ n$ q4 g2 u
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ x v9 C2 F; G3 \3 l6 N
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! F' q" P$ H! O; u C
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! t5 p. J$ b- [3 d2 g
# T4 D. G3 Z, l& Y$ l" ~
/*等待UPP传输完毕*/
. h) y5 Z1 m1 ?
//i=0;
+ ~4 | }# f1 t) u% v, _
//j=0;
9 Q/ a% p. {7 h% \; c! g0 j
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 Z$ V% }7 s5 y3 F. {( k
{
2 ~& b- `3 l6 r8 h
/* 测试UPP传输的同时操作普通DDR数据
$ K/ v5 j1 }$ t9 s% U' v
temp
=i;
3 B$ X7 K2 t' _3 V) Y3 g6 W- b
i++;
6 H! n5 i: q% }* D! i
if(i==1024)
0 a9 `" U- [( F/ C
{
$ t% z* R( F$ w
i=0;
v9 Z2 \% f2 [% V7 e8 o/ P
j++;
! a# K" E& q' c" V# Y
}
* a, J* Z; p5 z1 H* e2 N" n, ^0 N
*/
. b+ `/ _8 H7 K2 v. |' }! E+ W" O) V
9 S4 t W" |- k) R! g
asm(" nop");
) X9 P# {1 Y" C+ p$ r
- i* d4 D# z3 \
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 i9 a' J, O0 {
}
0 _# T( v2 K- z b. w
" z% S+ |! l# S' o; x3 w+ k# Z+ t
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. E0 z7 Y0 p; a! [4 |5 u1 ~" ?
//UARTprintf( "i=%d\n",i);
9 U/ V# O! H) n: N7 X" n# C6 S
//UARTprintf( "j=%d\n",j);
+ x% a% ^/ [" ~8 O
UARTPuts("Data mismatch in buffers.\n",-2);
6 t( f5 K' @, y
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 |5 L2 R$ m3 J( Y! L
{
& `- G7 P1 O1 g$ I
for (i = 0; i<upp_frame_size; i++)
: V4 [1 v- A$ k1 o, b
{
: m: t! f* V9 c2 _5 ^
if (upp_buffer_a
!= upp_buffer_b
)
8 _" ]7 j$ F" T" B& n1 _9 [
{
; b( j+ r- C6 s6 H A, \
upp_error_count++;
: s% S0 \, t. v* n: e9 `2 B
}
/ ]2 W0 ~2 |* D" J* q4 T
}
: o# m4 r9 _" `: N7 S: V
}
' y% g' F e R% X c- H
l; g8 a" A" V* A i( k+ Z# t
/* 报告通信结果*/
9 Y: ]. A- x8 U' ]$ r2 |
if(upp_error_count != 0)
( L* L8 |- B6 ~
UARTprintf( "upp_error_count=%d\n",upp_error_count);
! F6 k' W2 W- w; @( |( [
else
! D) K8 I N. s* `! [" {8 V; o* L
UARTPuts("uPP transfers complete!\n",-2);
+ D. E- q2 r+ U6 \
( S5 i/ }* a* k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
$ O7 k8 Z' \) [0 a) _2 S
UARTGets(ch,2);
9 F% I. Y" D4 j2 p# p
UARTPuts("\n", -2);
- L! X+ K% w& f) Y% r& X2 F& H0 U' V
" m/ A; a8 @1 w- M8 H+ w7 P7 m
if(ch[0] == 'y')
7 o' e4 r( W% J/ F% e
{
# X, a# B2 _ }. ~$ n, V+ Q
/*打印全部读到的数据*/
" a$ Y+ q$ B- D' _3 {" {* ^
for(i=0; i<upp_frame_size; )
% M p0 b% ?% D; s, b' p h0 j
{
" Y2 O& w: d% t2 @ E- E6 V
for(j=0; j<5; j++)
: R3 W/ j# h: F# x% v! q
{
# Q! C- V3 a& z9 a! T; t- a
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) v) o8 O, b! o4 R
i++;
/ _$ q) D3 Z: O8 d: a0 ~
//if(i >= 4096)
- O( F) z6 \2 p( Q
// break;
, c ]- Y' A5 J
. G1 l7 j* P! j; p4 A+ f
}
. i% O, Q/ c, w6 l: L
UARTPuts("\n",-2);
9 o* P/ n% ^6 C3 y# J0 L* r
}
: N3 o# G/ o! j: W6 P7 v& q$ O
}
+ G: i, }8 ~! v) c0 b" P z- y
, L. E% [' q- `( f0 Y
}
* w* S8 x* c% h; p
, D# F- @0 C0 ]
) W, p4 \; K& S$ I
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% }4 S" ^0 ^. B
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& n- T) s7 g& h! e; [6 e
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4