嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 N" e: V% u& J0 T
Void UPP_TASK(Void)
8 T. W/ Z5 l M# Q* j. `
{
+ d/ M8 w5 }$ Q! u
/ c- z. F% |' s- p u
int i,j,k,target_int_count=2;
& N( ^/ P0 Q, R. i- A7 C/ ~
char ch[2];
+ E x9 k4 n7 }' ~, O( z7 L) ]# }. ?
, b& H/ ^+ h4 @
. n6 i' X+ E, @. R ]
h+ P( F. u7 A( K4 d
upp_interrupt_count = 0;
4 I' Y; f4 Z) k+ t9 ?7 I8 K
upp_error_count = 0;
5 p& M0 L* D$ W. A; h* |$ ]
& p- Y" R' E3 m9 w6 f' ~
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ y/ ?0 q4 M" U% P3 m) C
// Initialize data buffers
9 N% X$ H; Y8 W$ k5 o* I+ ?2 o
for (i = 0; i < upp_frame_size; i++)
( |1 { I0 B @5 V# K
{
- }0 K7 ^, D$ E
upp_buffer_b
=i;
& \1 R2 s; Y( _: \3 K4 w; ?+ I$ \
upp_buffer_a
= 0xDEAD;
3 [# C% @1 M, U$ A1 g8 B# D5 y6 }" @
}
- @% f! @8 ^; `. Q! |$ |
# A, o* n$ g2 i& i" R
//for(i=0;i<1024;i++)
0 {% m, V& H4 t- y4 q5 h; N* W; y
// temp
=0;
" n; s' {2 Z( G8 b4 T3 ?. U# {; Y+ o. N
6 r/ B% h' d& q9 ^2 K* w9 D
//UPPReset();
5 D: w' g5 E$ }2 u' ?' ~
/*启动UPP DMA传输*/
1 I& o. d- {* E) W+ \- T( u2 Q
UARTPuts("upp_prog_dma_i\n",-2);
* ~1 Y& o0 I3 C8 g4 R5 O i/ b
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 T+ Z8 V$ V- w" J: n( e& v5 T6 L; g
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
|+ k5 R7 W' g5 r
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) F! n% `' V; y5 n4 q6 U
3 j! R2 u- l a4 ?: t2 M
UARTPuts("upp_prog_dma_i\n",-2);
! l- l2 y B) H- G0 c5 U' C
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
c/ z1 D2 S3 i2 S7 ~
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* O' B% m3 _1 P* ?7 S1 ?% o
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; u0 W, p* O2 q% U- P/ q; N* ]
# b( Q" ?: \; B S3 p( g: H
/*等待UPP传输完毕*/
" N& A w/ I9 P2 H: m/ Z
//i=0;
N- Y" M) l3 x
//j=0;
5 x# l- j0 H# T
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' f9 P$ r- p, H/ v, T ~$ ]' @
{
4 q" n0 [+ S7 r: U o* D
/* 测试UPP传输的同时操作普通DDR数据
0 y7 P3 A7 o( u
temp
=i;
) k! {! o8 ~2 }6 M( G" Z
i++;
( o- `. [: t4 S
if(i==1024)
$ J% E% P- [/ B
{
3 j4 M& x! ]( `+ G
i=0;
+ o) e# \( X' W" _+ Q
j++;
: @! R' o5 ~# `
}
$ L7 K& L6 R; x7 t, s# J
*/
& x a1 N9 B$ E
3 A& n+ S1 J) g I& E3 f' j) {
asm(" nop");
- l/ @$ t; Z, p2 F; q: ?2 M. }
/ E" T( T9 l, \% }6 M h8 c1 V
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! _. [ A. a: |
}
0 O9 J4 Z9 k3 i! G$ h" u
5 u; l0 E0 g* z$ @
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& [. ~/ ~! e3 g* C
//UARTprintf( "i=%d\n",i);
( e1 w; d1 k' s5 Z2 H
//UARTprintf( "j=%d\n",j);
; h- x' |! Q' |( D6 _
UARTPuts("Data mismatch in buffers.\n",-2);
: L& J9 L$ X' M4 m6 T- Z- S! m$ c
if (upp_interrupt_count == 2 && upp_error_count == 0)
) k2 K4 }1 ?; y$ L, y" j1 j6 x
{
4 J1 p( @. N8 I/ `3 C& B
for (i = 0; i<upp_frame_size; i++)
/ C; s2 a3 j8 V! e8 ~8 J/ O0 ?: F
{
! A, Z3 W, A9 |$ f. i# k$ g
if (upp_buffer_a
!= upp_buffer_b
)
I3 v+ T" q) U8 T( T& @0 l
{
* [, ~9 W \! A; {$ U3 K! o
upp_error_count++;
: q7 D8 D3 A- x O( O
}
( n; g: Y1 _- k, E$ E+ O7 {/ c
}
/ N0 Y- d% Y5 r( B
}
* k8 N8 K E4 v- \+ D- |3 u' C, N" c
0 t( X4 j# k$ `1 |
/* 报告通信结果*/
. p& q; N1 \+ X" H+ e
if(upp_error_count != 0)
+ k1 h6 T( v7 N4 L# v4 X
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 q6 v0 H! F# W' R/ S/ a/ t
else
8 ]3 l. k+ w' k" J
UARTPuts("uPP transfers complete!\n",-2);
9 K. R) y4 ]# N) a" e: |
7 h B* m* H& i0 s. B$ w
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& W0 x$ |) s, h6 R3 A- Y
UARTGets(ch,2);
, y2 \4 p$ D4 m* c
UARTPuts("\n", -2);
K. G& m* S7 Z% }1 v0 x" f
" R6 \6 o) g$ w. {. e
if(ch[0] == 'y')
8 y5 C! \. H) \6 L* l" V
{
3 C7 k; p" Z* V8 P! I; |& x3 R0 i7 e* [
/*打印全部读到的数据*/
0 T3 J6 S- }7 c5 n# ~ l! N8 F4 b+ P
for(i=0; i<upp_frame_size; )
4 f) s5 G+ I4 v8 g- X% W/ g
{
/ \/ A% z! L0 F
for(j=0; j<5; j++)
1 v. ^5 e! i5 j' T2 K) b# q
{
2 V& J2 s. j" \+ d! V
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 n$ o# e' t: s; F5 O% N5 o% G
i++;
8 G' U/ {+ e' I7 I
//if(i >= 4096)
7 D' i; R$ E0 D+ F
// break;
3 S; o" K/ C2 E W7 A
$ b& W' h( E9 W7 F2 x
}
" w! J! e8 \" F: Q' Q, d
UARTPuts("\n",-2);
% h+ D" }6 b7 b e# ^
}
2 d% d" a6 G i0 e
}
% E+ ?8 |' h! |# g8 ^. U7 H9 i
- j& q9 @9 s' z+ c
}
' s3 v7 b3 U: w& \, `
; N* J9 T: O u& h; Q9 c; T
" B! w# D4 W3 }' [5 ~. K
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 m3 K/ T( c1 y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' w& Z3 S, |4 J" `
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4