嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ q) \5 d s7 l7 P: _
Void UPP_TASK(Void)
9 h C7 l. o& W: t) F
{
2 q" M: w5 b' a9 c$ l, y
8 {$ e1 Q! l: u8 C
int i,j,k,target_int_count=2;
. |/ S1 ~% n" Z# S- y( ]. h
char ch[2];
/ \/ I j/ g# [8 W2 \3 {' _1 H
4 T3 N4 g& ~& T9 s
; { Y% D3 K; U [
3 S- z8 |" ~4 t; L D
upp_interrupt_count = 0;
- G. \6 A5 p d. ]+ G9 @
upp_error_count = 0;
3 Z3 X& E9 C; E
9 |2 G$ U: `0 x2 c% B5 m% G
UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 k. i0 X* |5 G& u! Y
// Initialize data buffers
; ~- Q, c5 b1 l
for (i = 0; i < upp_frame_size; i++)
* J: L( D" p" S0 }! {1 N
{
, `) u/ G5 i$ Y8 i* X# L
upp_buffer_b
=i;
$ i9 A. e4 s, u& j
upp_buffer_a
= 0xDEAD;
, ~0 j! r; W4 z) c) k
}
6 V- |, \3 n! f- k2 a! N, e! _
4 Q. Q) \; ?& g8 Q! D
//for(i=0;i<1024;i++)
9 B7 b# v! n T; o) v- l$ ^
// temp
=0;
' S: N. S. s$ M$ K- m
0 P. @+ a( R/ E2 _4 g* i
//UPPReset();
8 I3 O- v3 ~, o& }
/*启动UPP DMA传输*/
' j, y: S( R! |% C& I
UARTPuts("upp_prog_dma_i\n",-2);
7 ~% {6 U$ j" H$ _9 E% o5 U8 W! {$ W
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 S8 O& C' x* X" I3 D
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) r9 |$ P& }4 I1 ]5 t
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; G/ ^; A; b4 `& ^& Z5 @$ n
0 o: \& P9 y. G2 X3 S- Z
UARTPuts("upp_prog_dma_i\n",-2);
1 A- I; t$ X% s" w$ }( P# W) C
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, o& ?! m) Z9 { ~- U- Y
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) A' S3 _" i6 e0 v h% U: d
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 y8 R/ q$ Z7 v2 [8 ]
8 }" F6 k& l j3 g \7 U
/*等待UPP传输完毕*/
. ~) c* n# P# q2 d/ T
//i=0;
! J/ J! L- h' L; K/ {
//j=0;
) y) q' N/ N" L ?' F4 P
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 }+ r; q, E7 V& z
{
( A; h x/ Q! D+ I( \- `* I
/* 测试UPP传输的同时操作普通DDR数据
1 \" O5 o9 ?9 J7 s
temp
=i;
3 h) u( n, A( d( F
i++;
2 L4 a w6 l; t' G L
if(i==1024)
0 l L0 S3 L2 h' E) m' j' z4 k
{
& \0 m c) f4 t; L, T
i=0;
& R' {, y# B: Q1 h
j++;
9 v1 S3 C1 i9 h/ u+ i
}
( \; W6 Q2 y' E6 z
*/
7 J! t0 c6 _+ w* H
$ f1 w3 U3 ~2 D, {
asm(" nop");
$ n7 k6 p4 f6 Q) y8 P* G
0 @. G) b: p4 B) s
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- T: O9 w j2 q5 R4 z
}
& Z% u& j5 Y% B- u( U
" T1 L- j& p$ l3 j- y
/*检查UPP传输的数据是否正确 (loopback modes only)*/
Z/ _1 `; P& J* b+ E% F4 i( Y, d
//UARTprintf( "i=%d\n",i);
* z& m; x/ \+ L1 r
//UARTprintf( "j=%d\n",j);
6 o; e; N! H+ {" Y+ h
UARTPuts("Data mismatch in buffers.\n",-2);
3 k( z# S$ V$ O9 t7 @
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 S) d" F6 ~5 O" X: J& p
{
# }. X+ u# V" E, j
for (i = 0; i<upp_frame_size; i++)
d" f+ Y' s; P) D% A" B+ @3 ]
{
' \1 ]8 f4 D( L& `2 H8 J2 J5 h
if (upp_buffer_a
!= upp_buffer_b
)
% U \. E) T% Q
{
{' m3 b6 g k6 k; u B$ |3 ?
upp_error_count++;
" q7 {4 ~( D; r: W! e
}
+ L1 N: a9 n- X. z+ _4 y+ [
}
4 t9 e" I" _1 e! m) o: |2 g
}
; `/ f& Z% l- {$ k
5 a% m7 p2 c- L, h1 }+ ]' t+ h
/* 报告通信结果*/
/ d5 N. k, f; S
if(upp_error_count != 0)
: Y& Y; [: [5 ]6 n8 ], u% [
UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 s. T u0 C' }8 S' U. J
else
' [0 ], Z/ {) ]6 l. f
UARTPuts("uPP transfers complete!\n",-2);
, R& j! P# s; B
4 g; |+ R. o7 [) }* D7 H8 n
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* y+ f2 z `9 V* U; t2 L1 Y; X
UARTGets(ch,2);
4 c% b, d1 }% K
UARTPuts("\n", -2);
$ t' G4 i9 |. _/ b( k4 ?; Q% @' y
5 q0 C/ G+ y+ x6 Y3 Y* b6 q2 `
if(ch[0] == 'y')
3 g( r. P7 ?7 F0 _6 r
{
3 ^& J8 ?+ z0 Q
/*打印全部读到的数据*/
" `4 }! Q6 p5 w% q5 h$ i: [: G
for(i=0; i<upp_frame_size; )
: X0 h# j4 M: B) b ^* W0 |
{
, D( E+ k! ?8 M' @, i
for(j=0; j<5; j++)
+ P h* g. H3 z( m' _
{
3 [% a$ E3 j. f4 j( w, w- h
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
$ G) N& ?! x0 B6 P
i++;
6 c1 U' ]; z" |/ ?6 x
//if(i >= 4096)
9 p5 ?! R7 \$ j" z7 W
// break;
$ f. N) q7 k$ ^
% |" i/ ^: B) f3 ^9 q
}
8 ?% {( ]. d6 E' u, Q
UARTPuts("\n",-2);
7 q, w( d! N; f O
}
& p8 d. E+ M, V6 m
}
$ P6 }1 ^- g- A- j: ]) i+ a4 B7 x
" [# n* j/ W4 U, u8 V* Y
}
' \$ ^) J2 \& u% z
, z# J0 H% {- ~
& [5 e1 Y+ u, E4 q! A# W! {+ W$ o1 O
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 u- c; C: q& |' ?5 Q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' q+ h. T k* f
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4