嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 i9 L* y' C3 {% u+ g
Void UPP_TASK(Void)
( Y" |3 l! b+ i8 [( M
{
* z# B. f$ A- W2 D3 U$ P2 O( T' M
" Y l# ?$ Q( u
int i,j,k,target_int_count=2;
! [7 C: c) N0 C+ ]
char ch[2];
5 [9 n9 v5 {7 c' H0 }
: J; U2 O( v5 }6 ^
/ b- v5 N- d+ A: G7 j( i) X% d
7 t: p0 j0 a6 `& U% c2 E5 i$ n- X
upp_interrupt_count = 0;
) Z% k- ?/ Y c8 O+ {5 [6 N
upp_error_count = 0;
1 x H# d& t2 P$ H! _
4 \+ |" x& [2 N% x2 \2 L
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 O- P3 h5 o6 B1 V+ W5 M# ~) X& |" K
// Initialize data buffers
8 r9 D1 L9 L6 g
for (i = 0; i < upp_frame_size; i++)
* Q4 `* j J. P) P8 k
{
& S6 [1 {5 E7 F3 i: k; Y
upp_buffer_b
=i;
4 w- b3 ~ L+ H4 O% @
upp_buffer_a
= 0xDEAD;
+ C- j2 A i( g3 J: d- Y2 ~* p
}
/ M, I* U( c: ?$ m }+ l; K$ r
- {6 v" u5 r. _% |. \* c. _9 N
//for(i=0;i<1024;i++)
0 }& }4 I( p' d
// temp
=0;
0 o4 N+ L0 Z/ m \
, g" `3 x- z3 ]/ J6 ^: _% w
//UPPReset();
7 L; u( w6 z$ c/ L% v& b
/*启动UPP DMA传输*/
' H- h( i1 h" T. J$ q5 w
UARTPuts("upp_prog_dma_i\n",-2);
" ]) N! I+ d* S: x# D* z
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 I8 |, S" l! I5 j( f
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ C" d) f, p9 N! A/ W' n
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; ~& f: {$ U9 e& D! {
( A; i# C1 H* P: N; {, }! p
UARTPuts("upp_prog_dma_i\n",-2);
E6 B& i. U$ |+ n# U3 Q
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* r; P* L; u# N
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; u/ b8 K2 R' a2 H. Z- O
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: ~$ t) W; p! x9 m
& l0 U8 J( h o- w, {; z
/*等待UPP传输完毕*/
4 }0 K+ A8 |/ f+ E% x3 E+ ~
//i=0;
3 F; [1 \' R. h& D
//j=0;
* C% P% Y$ E) ^+ z
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( B' A1 v x1 x# G
{
% @ k( t7 y3 G
/* 测试UPP传输的同时操作普通DDR数据
* d W4 K& ]0 L1 }1 k2 [4 \
temp
=i;
1 Y% y" h- ]: ]8 d
i++;
q- P# v L, m6 U; V
if(i==1024)
- h9 h7 f& Z- H( K! b0 _# X
{
% Y$ c3 i1 U2 G3 l6 P9 K
i=0;
, ~$ V. q* [/ h
j++;
6 D4 x$ n* `4 e7 E5 ]$ |
}
- r* u* Y, T4 z0 Y$ j' A; }' w: {
*/
( ~1 E+ Q+ L0 \& F' g
; z6 i& A( u# C7 J0 ^, I" [
asm(" nop");
2 u- d8 K" x8 M, @
) l: q9 n4 ]# I/ y2 X0 M( j9 @
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' `4 M# K# Z0 G1 ~7 ?$ A& F
}
5 j( C1 W5 g. r
' f$ O+ i! B+ y6 q
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% B) G! ]# U' K! B. R
//UARTprintf( "i=%d\n",i);
" f; n" Y4 a1 M O
//UARTprintf( "j=%d\n",j);
$ p" C" k8 U/ P( v& `+ F
UARTPuts("Data mismatch in buffers.\n",-2);
7 ]8 i1 n/ H% l6 C% o
if (upp_interrupt_count == 2 && upp_error_count == 0)
' `) i: u/ ?6 {8 T- ?* u) f3 W
{
u- [$ R; W& j( v2 U$ I
for (i = 0; i<upp_frame_size; i++)
6 d$ W$ c1 g- n+ D) ^
{
W2 f1 K, G+ M/ o6 e+ X
if (upp_buffer_a
!= upp_buffer_b
)
" `4 Q0 x9 H/ s/ j: X" f
{
7 y, O' I: ]9 ^) F8 S* ]
upp_error_count++;
' j' H0 A/ V$ ` u/ X, N
}
- t' ?9 X$ N' U" E8 v7 c& {
}
% |. }, ~# q. |5 z+ j5 n5 a
}
+ m4 Y& x) r4 z
1 d. O) p" s3 c/ C5 s4 e
/* 报告通信结果*/
7 H, }: c. A5 |+ c1 u9 `7 U
if(upp_error_count != 0)
2 w3 t7 a, ~3 p) I& @$ [9 W
UARTprintf( "upp_error_count=%d\n",upp_error_count);
" q1 \% `/ G; t% e; ~" P: w% a. S0 o4 M
else
S+ U7 ?; X5 l
UARTPuts("uPP transfers complete!\n",-2);
$ a% S) T) F( H
, x. _: H6 u& ^' w- @0 Z5 H
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) r# M4 w4 F" B* m X
UARTGets(ch,2);
0 y/ v8 N8 Z& e
UARTPuts("\n", -2);
. j6 b/ X4 b3 O0 W6 W/ a
# L7 a; {( J4 I( i% ]( |$ s4 N& |
if(ch[0] == 'y')
? P3 H" y5 _9 D0 P' M W' }
{
8 T) M, T8 O0 G* v
/*打印全部读到的数据*/
* p/ e2 A! b( l. j
for(i=0; i<upp_frame_size; )
( ~6 o @9 N! v% a6 m2 {
{
; |# g% U3 O: E4 Z+ c
for(j=0; j<5; j++)
" X, I' X" ^1 O) X
{
. K1 ?: u# H/ A% |8 j; B
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* e* e: d; I6 @* u$ L
i++;
3 E6 k& e) f ^- _
//if(i >= 4096)
" r) d A4 G+ s7 k. `
// break;
6 @' a' p7 u; w# L3 [) |+ n
\1 q& J! v3 j: N) k
}
+ S" P6 B+ y1 I& \( a
UARTPuts("\n",-2);
! e- S: L+ @3 e, J3 Y
}
0 V1 I5 f& Y( n2 |# y7 f
}
6 Z9 ?5 J3 i+ z; o+ N* y
: X9 I/ ~0 C: P% ?$ C; z
}
! I' r. Z, D$ e8 i; }
8 I' | ?$ Y) ~6 b
k1 C* C; V6 F
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 g1 A3 p* D/ n3 Q/ J2 g" l( B7 j
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ g2 }& `, k3 j
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4