嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, S- m9 T, H3 m6 `9 R2 O) y
Void UPP_TASK(Void)
) ?: w! l8 W, D, q% {% ^2 a# m
{
: y8 _" n' g" M, }3 W
$ N2 N9 ~5 D6 t% B, X5 i8 {$ e
int i,j,k,target_int_count=2;
3 |* @/ q) v& z. a7 J! v5 r a/ |( P: B
char ch[2];
2 a0 M* I8 p/ u
0 m4 ]0 O- @4 g, w* ?$ e
( w! B3 {3 g9 h/ A6 o
! B5 j' [4 q8 M4 E% w& a6 s Z$ a
upp_interrupt_count = 0;
# U8 e* P' ]' [$ H! d9 {2 C p F: l
upp_error_count = 0;
/ E8 n' x9 p0 i- ~1 j2 }8 |
5 C& ~/ e$ s5 [$ _8 l
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 z p% S3 `/ y3 J
// Initialize data buffers
, n X6 @# P) b3 S2 ?4 Q
for (i = 0; i < upp_frame_size; i++)
; B$ w2 c! B; V8 v
{
- T- @* {% X; T( J
upp_buffer_b
=i;
& O4 u2 C4 K( V6 {$ J
upp_buffer_a
= 0xDEAD;
, s' z! V9 \2 h" Z+ m# ?
}
+ F$ O2 ?- O7 r5 W- ]& z9 q
$ B; _6 ?& X& b4 n9 l' `
//for(i=0;i<1024;i++)
" H9 z* G# h! c/ C; d7 E% s+ Y
// temp
=0;
% c* B( m9 Z2 h: [
( B$ h. \' C" N) K/ b
//UPPReset();
1 O7 {+ H' E2 Y k
/*启动UPP DMA传输*/
& X7 F/ n3 b6 `9 x3 d
UARTPuts("upp_prog_dma_i\n",-2);
; j& K" f1 {# ~8 z* u. u
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ p, c- Z% T$ a H7 j
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& U" i: D4 z/ R! w: ]$ Q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 D: a, Y% ] t1 o0 [$ F2 Y
8 s$ X2 |5 q! {' y% o+ e
UARTPuts("upp_prog_dma_i\n",-2);
& T a6 V3 d) h7 }& R" P4 t# A
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
" w: |7 q E# p; N! H6 k3 Z) G% q4 F
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
D; }+ s- J* C) d8 U
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! }5 j+ f5 b0 K
0 K' J# t5 D- ^% _$ A$ Q
/*等待UPP传输完毕*/
$ x+ S/ @- v4 p1 f, V2 Q+ B% o& Q6 s5 Z
//i=0;
. \$ F4 A9 K7 l8 }9 D6 Z% Z) N
//j=0;
4 n5 W9 T6 Y0 ]" D/ o% j$ q
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ Y- k: y4 `" J/ k1 b1 S5 w; x; k
{
# ?: @) R- u& X$ u
/* 测试UPP传输的同时操作普通DDR数据
+ M* ^1 a' W, e2 E1 q) C7 F& Q
temp
=i;
# m W C- M3 m t: L
i++;
) n7 Z; B& v+ Q" X6 x H# ~
if(i==1024)
3 L, I4 ?( @, G4 h0 o0 s: m& y0 \
{
; f6 P4 I6 H K# k2 D+ M, g
i=0;
! K. k. ^* S4 |/ A Z8 ]7 p: b
j++;
" i8 D3 m: q. w, K$ S0 `" F
}
1 K* r8 D0 x$ K6 B$ x, Z' Q2 `$ ~
*/
u- J4 |1 y6 A" o
7 C# h* c& k$ ^/ }4 l
asm(" nop");
1 O6 k, k7 t8 o# |4 H* w/ k! |
- c5 k! z4 d- Y1 S9 i0 t4 [& \: P
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 g0 u) U* s9 ` j6 @/ T6 M) R/ D, f
}
& k( K0 |' A( I$ o, ^
- Z+ [7 S9 t+ ~- z5 Q; Z, n
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 s. g: K& W6 B8 o2 ^
//UARTprintf( "i=%d\n",i);
* G8 q( J/ \/ n! e0 b7 f! u5 v
//UARTprintf( "j=%d\n",j);
8 q& ^/ Q y9 e- }' _+ X: a/ i
UARTPuts("Data mismatch in buffers.\n",-2);
/ j G$ v/ t+ W9 J9 x( o
if (upp_interrupt_count == 2 && upp_error_count == 0)
& x- o: b4 Z7 D8 v! A% S
{
( E* V. J, y, K2 C! o7 S
for (i = 0; i<upp_frame_size; i++)
: x- a0 }9 R; P6 K
{
$ Y+ C& l- Q: q% [5 ^" O
if (upp_buffer_a
!= upp_buffer_b
)
2 S* _* H; { d" m/ p+ f7 g
{
, |( t1 r0 q& F4 _- S
upp_error_count++;
8 b$ q3 Q9 X1 J7 A' j' a( L x
}
6 R( d# L6 Y# E. c u
}
3 Z: m" @3 M- l- _8 x$ U
}
6 F4 ]& ^8 [% x% K. b' _8 T
+ D& h% {, N8 I
/* 报告通信结果*/
* O" i" O& i; K9 x2 f9 A
if(upp_error_count != 0)
5 W8 b* f1 l5 E0 A6 @! R* ~! T! E/ @
UARTprintf( "upp_error_count=%d\n",upp_error_count);
! v. X% v+ ^/ J- W8 E
else
2 t# S6 u0 i' \' L
UARTPuts("uPP transfers complete!\n",-2);
7 H* z* A4 H/ }! Q' b& J) r c6 E. _
/ ]8 T+ a9 z% F* a/ }1 G
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% h/ G) m5 E& P' p, V* R! g
UARTGets(ch,2);
8 J5 K, W1 c* f5 @
UARTPuts("\n", -2);
& G" d; M6 o3 S) s$ p4 b7 D
! z, M; ?, Q9 q9 M V+ K
if(ch[0] == 'y')
5 l- Z" M: h$ k# G
{
8 E Q7 t+ o, Y7 \1 z, J R0 Y
/*打印全部读到的数据*/
2 y5 \" @1 {. q4 I
for(i=0; i<upp_frame_size; )
0 c$ X2 R, f) J |! x
{
) F8 n; L. m4 O1 ]9 J
for(j=0; j<5; j++)
1 o8 l1 u/ v5 d" w) T* O5 r' L# v. R
{
; e$ d1 _3 c$ O3 q+ }
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 N( a% h' |4 h( |! U
i++;
* L3 Z( q# X# {4 I7 l' M
//if(i >= 4096)
# _4 }4 ` d0 C7 M& S
// break;
7 r; H5 y2 D- E; u
2 l9 D5 P Z" J' Y
}
% Y2 Q& G' s$ J0 q# M
UARTPuts("\n",-2);
/ _& Y J4 }3 |- |7 M6 j
}
1 U7 f# n- j! Q, k( p. H
}
- t# Z( Y2 K- G ?4 K
4 h) }7 \0 l' [& ?6 T0 _. m# S
}
; ]5 z) ]/ i( h+ n2 {( m$ }) Y
0 c7 Z$ a* u$ k. V" W B' ^
7 G" P* |& ?. o2 u( U) }- u* I
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
d9 ]" \. A! ?- f
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) `& ] v( q( i
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4