嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; x/ K$ ? P$ B! ]7 B
Void UPP_TASK(Void)
: X" l4 C3 ^7 A# N3 y4 n# p
{
2 k( t8 w' L6 y2 C# c" D5 ?( J
# W' g2 q0 l( P6 V L
int i,j,k,target_int_count=2;
9 Y, {: @( ` l8 o; a$ N
char ch[2];
& {/ { h" g! O. Q9 [ M8 j0 [9 C: K
( c( B5 _, o6 b! @1 p
{* z$ s+ J# b! ?: V6 H% S% I) `
, z, Q) N' m* y. z* W
upp_interrupt_count = 0;
" {6 I0 c9 y+ E4 |9 J8 N7 X3 ?
upp_error_count = 0;
0 _8 \. ?8 |) }& E
# |; x. A x0 f3 n5 ^
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 v5 X* G, T; B6 o" r6 K5 o
// Initialize data buffers
: @$ l: g% D! W
for (i = 0; i < upp_frame_size; i++)
0 k2 ]* b2 W- ~
{
/ C- \. H Q2 V! y* P4 ]+ Y
upp_buffer_b
=i;
% V! `" W9 W) a# {
upp_buffer_a
= 0xDEAD;
" s* y0 l4 D% m) j
}
) O" P9 {5 i) Z" t# e6 I& n8 n$ y! m
0 }1 ]2 l9 N3 E1 F$ y
//for(i=0;i<1024;i++)
# R$ z5 M% }- v0 w
// temp
=0;
# r, Q; \. ?* h; Q
( ], e ~7 l/ j' q x
//UPPReset();
5 M9 P9 X1 U, F' w2 B8 m
/*启动UPP DMA传输*/
& n+ h6 D+ G: f5 B: I, x" ^3 s
UARTPuts("upp_prog_dma_i\n",-2);
4 o6 o3 }* I- x5 b! O5 X
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
$ u9 v3 j. O U+ P5 |
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 x0 [: r1 N7 |8 g8 t! m8 |8 b
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% t) j" w x% }$ K) d, q' i! |5 `
i5 ?$ v* D K i# j" N/ N
UARTPuts("upp_prog_dma_i\n",-2);
0 S; O- F, V# H. b
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 ?; ~6 g% a) t# x7 |
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ c# O$ [" S+ m3 A/ b7 d. \, N
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! y7 Z0 v; c% N( w$ v
3 j! V- j% `) M% r6 O3 }2 f1 X# B
/*等待UPP传输完毕*/
3 T& n9 i3 Q8 _7 @ q! v/ K1 L
//i=0;
- c+ H% p, q4 o0 A; p
//j=0;
/ ^9 E8 A1 b% t- ^/ j6 @( V* P; _
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 H2 K9 [) R7 }3 j N. N
{
; y+ m" a+ t, f( _8 H% T0 ^
/* 测试UPP传输的同时操作普通DDR数据
9 u1 R7 J0 b3 U: `5 S
temp
=i;
5 b. `+ P" B- z1 s3 w
i++;
0 @! ?! a0 S, v6 _
if(i==1024)
& g5 X7 x7 `) Q
{
$ ]' D5 s! @% N; B
i=0;
5 E* w$ {& H) F; G `
j++;
$ D7 j+ L$ b3 X+ K8 Z
}
& @1 {, ?/ E8 W* k% D; i& z0 z8 D, ^ L
*/
/ |. D- ?. U2 B. Q7 \
8 e, S o3 |9 ]1 Y1 p
asm(" nop");
$ ^! D/ o8 w/ R) r
- u9 |7 `+ u4 }$ w; F
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ C0 {" j9 t8 e, {/ Z
}
7 k- N& x) n, a. ^0 D
7 ]1 ]4 K" c3 ^4 T# L+ |, U: r
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* a Z. m& m4 f w, `; l' c
//UARTprintf( "i=%d\n",i);
2 T, Z3 s* B: g, \/ `, J, E$ f: e
//UARTprintf( "j=%d\n",j);
; }2 Z! r, T! v- l9 M7 Q
UARTPuts("Data mismatch in buffers.\n",-2);
6 m9 ?7 Q, J8 ^
if (upp_interrupt_count == 2 && upp_error_count == 0)
' u. T% s. ~/ ?- ^2 V
{
% f$ U' r$ I& p) O$ n8 H
for (i = 0; i<upp_frame_size; i++)
6 G# Q+ E( O d! G$ C6 d0 x2 K
{
8 h9 t4 L1 ?* O4 ^' a
if (upp_buffer_a
!= upp_buffer_b
)
" X+ y! a1 r- B: o: H6 p( m; b
{
i( q# F5 r# M7 h' p
upp_error_count++;
: E9 Q- L( v5 i' A6 u& W
}
. i; _' |: h+ X2 s7 x! U
}
! G# i1 } o! G3 g. }
}
) U6 y$ |# L( I% v
2 [; m) t- [ {
/* 报告通信结果*/
9 x2 Q% z- t$ [: F( T1 ^
if(upp_error_count != 0)
9 H; V' d- x- C# E" g& M5 h6 g
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; w9 `+ _# J6 R; I% P6 {3 `
else
* t& ]" X4 P. l$ E
UARTPuts("uPP transfers complete!\n",-2);
4 g! K. {. e; w" }( \- r
# Q1 k; j, `$ j O* d+ ?
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& ~, j8 C' U+ ]* ]% _
UARTGets(ch,2);
. b% k& e4 K" l( o& E6 A Z
UARTPuts("\n", -2);
& N% K3 O& X0 J9 V5 y1 ]
4 o- x3 R5 V6 u
if(ch[0] == 'y')
0 }, T0 S) Z2 i, |+ [) n$ j) w
{
" l ?; B) q; E3 S8 L2 D& l
/*打印全部读到的数据*/
1 Z, }. t3 w! Z( U
for(i=0; i<upp_frame_size; )
/ E- X; c( V& L* ^
{
- f# ^- d- _3 ]
for(j=0; j<5; j++)
5 b, c) K5 g5 P r5 B
{
4 {+ E6 V2 }1 |: x; l
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ N! c6 ~! _" \+ Q4 q
i++;
% k3 M! g0 w1 V4 `$ Z1 }% k
//if(i >= 4096)
B) I" A: M/ F2 Y. q
// break;
3 U' m; n# `3 ?4 z
7 o: X5 s' O. W3 j5 f: S
}
4 X, S/ Y; s. [/ J: j- p8 I
UARTPuts("\n",-2);
/ X4 q, L4 o# m- H- R2 @
}
0 l7 T1 N; K' C
}
3 n! @& d4 E+ i v, m; u2 `
. B1 j5 T" L, S$ J. H( q
}
! f: F( }" w8 _% |, l/ y* Q
$ X+ q# m# j& c; u1 U
/ s' j- H9 ?0 C+ ?7 ^: v: {" n
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; B& F4 c! o9 s% E( k* d- ~4 ~. X5 u$ m
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" K" I7 v. M0 Y9 }+ ~7 k# {* p% O) D
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4