嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" ?8 Y# k2 [! C3 ~
Void UPP_TASK(Void)
n9 i% H6 r; \
{
- x! e# V4 t/ E. V
) j9 O: S1 f f. ~, O9 m( m
int i,j,k,target_int_count=2;
8 [1 J- w6 t8 S+ \; F# `. G
char ch[2];
" v4 i: K: a* X+ \
1 t: s; ~1 m$ w W" ?
$ `! m0 z1 j4 B
- T7 o: \& B/ D: r2 _' A( r
upp_interrupt_count = 0;
7 i E2 ?0 c% D
upp_error_count = 0;
* E O% W( I1 y5 L' @
* P7 o, L/ K4 j& D% p1 f. C" i
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 t0 L: \& L4 y" h7 P4 c5 n
// Initialize data buffers
# s" f' L0 Y5 X( T
for (i = 0; i < upp_frame_size; i++)
& C2 L, l8 J' p& s. ?
{
1 D- Z9 L$ l. O5 O/ x$ G0 a
upp_buffer_b
=i;
" {" x: v# a8 E- `0 p
upp_buffer_a
= 0xDEAD;
w6 G( b& ~* D% A4 }$ W
}
% ?/ r5 j6 w3 @
3 G! a* }* X- H" s) Q
//for(i=0;i<1024;i++)
; B* u/ Z* H7 o# O7 m3 _
// temp
=0;
0 _; d$ H% p; [8 }2 W* l
9 B; A/ o8 G4 a; ]; N
//UPPReset();
$ J$ ^, a! d( P m) v7 K
/*启动UPP DMA传输*/
7 h" {7 i3 ~/ |5 u8 T0 G+ K9 Y* l
UARTPuts("upp_prog_dma_i\n",-2);
; M- g: g* O! e: d
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
" |' U. e3 u6 T4 R
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ |5 U( t( j& D5 F2 X- M9 _
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 u" K) m! z" G
4 F7 Y M: z# }2 f( X+ l; L0 [
UARTPuts("upp_prog_dma_i\n",-2);
4 c' r/ R: w( [% o; k, P& y
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* E" a9 t6 S7 e& t, \1 _+ _
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 S7 N: w$ P7 f ^6 c- W% C
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 b8 |1 R0 K' g& q* |$ \# f( @" @: ~$ ~
2 c4 O" Z. y+ X) p
/*等待UPP传输完毕*/
! [: ?, I1 y' L$ i% ~% L
//i=0;
* b) R0 N4 s' Z
//j=0;
+ O" {3 \4 x u
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# `* n- p5 ~+ P' G- o$ S1 U
{
6 w5 r1 q: G4 |* P' z8 r
/* 测试UPP传输的同时操作普通DDR数据
Z1 P" `+ i$ x7 T y
temp
=i;
$ ?! I2 L9 a$ E8 h. m5 ?
i++;
! n. p5 |# ^3 \: [
if(i==1024)
. N% v- L1 [; d7 \7 b
{
& v7 L7 y9 ]+ f/ {& v
i=0;
1 W% u( @4 k( \
j++;
8 t8 c2 G8 s) \
}
7 N% S S" f7 B T( n& ?" e
*/
$ N" a/ B" L+ b8 v- e
+ Q6 W3 V9 y6 q3 H* n9 }
asm(" nop");
" x& {" g% E7 ^7 x9 ~$ E& B" O
4 l; q' @+ Y2 ?* g$ ?: Y) Y" m* u) F
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
7 @; e; J, a$ E! r1 X9 j, Q
}
5 ~9 \1 s: @0 S
g* o9 k! ^& W
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, R- b1 E5 ^7 m6 n' ]' Y5 v
//UARTprintf( "i=%d\n",i);
# M" { t' _' e5 P$ E( M x
//UARTprintf( "j=%d\n",j);
, F! c4 D$ ?, e6 {! I
UARTPuts("Data mismatch in buffers.\n",-2);
: V, k/ J6 X: w4 S, M, J: F
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 H; n+ b& v( N. U7 Y* p2 K/ E
{
0 o* I' \/ m: p/ \$ j: h( J
for (i = 0; i<upp_frame_size; i++)
3 u% f# W4 W% J- D; e
{
) `0 \1 K' N: H8 L+ l0 v
if (upp_buffer_a
!= upp_buffer_b
)
5 l% B C5 u/ y, j. l1 u+ H8 g0 _7 M) X
{
4 j8 O6 r% m3 N/ |2 o0 N; v8 c
upp_error_count++;
" T9 d; B( q, ^
}
. b3 a! J5 B6 b
}
6 Y* N/ r6 m4 Y# a. ]
}
) q% M* D- M# F" c. _- r
/ i. [3 s! E8 v1 w& Q+ S
/* 报告通信结果*/
7 g5 H. K' \' r0 c' {3 m+ t
if(upp_error_count != 0)
" \4 \! r8 w9 Z' V, d9 o! V2 w( o, ]
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 N* B7 _7 x/ j! B- g
else
/ h3 @: V+ X6 H7 O e
UARTPuts("uPP transfers complete!\n",-2);
9 e) S) n4 g6 N$ D. u" Y
8 q2 M1 J/ u! l
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 \# e4 @8 ^1 Y% I) D
UARTGets(ch,2);
5 z R1 b3 \3 l
UARTPuts("\n", -2);
" m& n6 o0 ]! T' X$ |1 j. c4 _
! {$ J6 A/ z% p! Z
if(ch[0] == 'y')
# B, ?6 c7 Q* y/ K1 S
{
: ]1 _3 j2 ?- ~
/*打印全部读到的数据*/
* k/ E' p+ w' f' j- L, s, S8 Q
for(i=0; i<upp_frame_size; )
8 ^; \. f) c1 F& X% g& ^* ]
{
. {# e, Y o4 p9 |
for(j=0; j<5; j++)
$ ^9 B w9 d0 f, m
{
+ \( B9 J2 u+ Z+ E% K3 ~' I1 @
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 E7 i9 k& Y: |% i7 ]
i++;
( i G0 h0 M7 g3 n P2 ]+ Z" D4 X% j
//if(i >= 4096)
[# z, r8 [0 z- k. v# x( ^$ f5 X
// break;
8 w# k3 K+ D( h, W
% K# _; X; H" w4 K( o V( `
}
: `' |/ S# D5 l! ?
UARTPuts("\n",-2);
" q/ [: ]4 N6 [) t v& D9 N$ z
}
' M0 L8 N- |! t& k3 c! V
}
7 h5 Z2 D# h- e7 C) L) l
, a0 y& A) u4 Q) s) V# h1 F
}
: r5 j. N9 q$ R- G6 f
7 S; z' C S- J
% V+ P/ Z: n* d, J* t
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% Q( D- U. x0 a5 S* M: Z' ]) L5 `0 M" o
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ x# |/ p$ `) @. |- c
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4