嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 a/ m0 }7 a, B
Void UPP_TASK(Void)
* v/ t8 t& K' [( O/ |& v/ Y9 _: k
{
( n0 X! B5 Q5 G
: s4 K) a. k0 _0 m* y) h* H
int i,j,k,target_int_count=2;
& ]6 A( P8 _* R; `) j' s, b4 V' u3 D
char ch[2];
; M' Y$ y& R7 I
! C, J" P" H9 {8 c
0 y$ x8 C. l U1 ^* k8 ]8 C. J
% B+ }# }2 r% r* _8 J, V+ ^3 |6 w. m- ]
upp_interrupt_count = 0;
& ?4 i- |/ |# M/ z$ Y
upp_error_count = 0;
& d; g7 l$ ?& ]8 ` w
- C0 @! h/ t9 Z4 W1 ?
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 z4 q: N" X( U" [0 J o! f
// Initialize data buffers
! u0 U; R8 U3 T& i, z- ~" i' {
for (i = 0; i < upp_frame_size; i++)
1 s# ~, p, v/ q' R2 [! L: o9 ?
{
6 ~* A' b# j; t
upp_buffer_b
=i;
: K" u$ y; Q+ O1 l
upp_buffer_a
= 0xDEAD;
' G: B' j; I0 T4 |
}
6 e* Y9 ^- C; B- d( o
# F/ ] u! d# G
//for(i=0;i<1024;i++)
6 M" i2 A4 }# F$ ^ o1 W
// temp
=0;
# \3 M- d. j& T8 G, F
2 U" v' G& v' \, i
//UPPReset();
+ `4 V2 D* |% q1 d7 s& v# r% a: a
/*启动UPP DMA传输*/
7 [9 R: z6 y. n u
UARTPuts("upp_prog_dma_i\n",-2);
# Z# d* c) H* Y# S5 R5 z
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# F$ E' j/ T8 R" @$ g) S* N
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 K! O: }* N3 |/ M B" c W# \4 Z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 ]6 j9 M q7 O
R+ y3 ^ X9 L) d
UARTPuts("upp_prog_dma_i\n",-2);
% d* Q Z& t0 j H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ b" ]/ X/ a. ]% \5 L
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ ]' w: B% n- A7 I; R
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% J9 B! c+ k% p1 i' m5 \
; w9 \6 ]$ i/ ^" \8 @& t0 y3 |
/*等待UPP传输完毕*/
; o; \0 s+ {3 q: R- |- j
//i=0;
& Z# q0 d5 h4 T' Y! j
//j=0;
" x* s( m- A& i: {
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
8 X. i) Z: x/ N0 j- z& r; ~$ j3 R1 }
{
" V p g) }5 z* Z
/* 测试UPP传输的同时操作普通DDR数据
0 r' \* B' c3 ^7 y
temp
=i;
! Z; A: E' A X) t
i++;
* }0 |0 X: M$ @# Y
if(i==1024)
& }* t4 s& l$ A' E2 E
{
6 J8 m( m- u& I! M& l
i=0;
# Q9 J- X5 X) u& Y; F! p2 o1 |* E
j++;
; y, l( b: s# a2 q
}
9 \" K9 `+ s" }: R4 K' y8 z* x A
*/
& x/ ^3 I* J( T" @
3 P. R9 n% c! W0 s$ K; M
asm(" nop");
- e- T1 F) T. X4 p
& B, J2 K4 w: B$ T: i
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( {6 ~% B$ U4 z/ u- y. w
}
3 z3 M2 r1 |& }! [, o5 y
. o7 z; ?, y5 j. d; j5 G
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 |4 o. P5 P& }7 P1 S# m
//UARTprintf( "i=%d\n",i);
2 p7 l- b& I6 h) | [/ k
//UARTprintf( "j=%d\n",j);
7 W5 n, F+ F, G8 E' [2 M
UARTPuts("Data mismatch in buffers.\n",-2);
) T* Y1 w9 O( k
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 M* Q$ [" v2 g) c2 c" V/ h
{
7 U: [' T) N! \3 O2 z
for (i = 0; i<upp_frame_size; i++)
6 m0 U, w$ X- l/ H
{
2 S! ?' E/ P: F( ~& m
if (upp_buffer_a
!= upp_buffer_b
)
5 h' w1 {: Z+ A! }# k: ?
{
4 i, O7 v# N! V3 \" h# i
upp_error_count++;
+ F4 \2 i- e" ]5 P0 ]6 ^& m$ h6 e
}
0 t- U. |! \+ i( Y( M' Q
}
4 v! u+ b$ c. ]% S8 O3 C0 F3 {
}
0 {0 g) _7 y5 B- Z4 E" L
& D3 g. @- j' ~/ `7 A' Z
/* 报告通信结果*/
; C, d% ?0 D6 c# V5 o
if(upp_error_count != 0)
' ~% t& |5 W. O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: c' z: b4 M* u' h
else
- \7 I/ n& T" s# [
UARTPuts("uPP transfers complete!\n",-2);
" r0 ~& G1 Y/ L! g- k: e) S% A) j
" ? w6 ]* F& R+ b8 L
UARTPuts("Do you want to print all the data?(y/n) ",-2);
" K% ~: x& E' d% `
UARTGets(ch,2);
" A' u* v% L7 A* W
UARTPuts("\n", -2);
2 \- [* }6 w: y! s- ^, p2 {
+ V- h0 P8 Q" s6 F& ^) T
if(ch[0] == 'y')
5 V. ]1 z4 ?3 {; D9 O7 W( f
{
# X( [6 P2 N7 N* Z$ \8 Y
/*打印全部读到的数据*/
2 W/ V5 `, W* \: t
for(i=0; i<upp_frame_size; )
$ ]( X- ?# m+ _: ?2 ]9 R
{
- |% H: V% u; `; w5 k3 r
for(j=0; j<5; j++)
2 W' [" W. `9 \/ m* d3 i
{
) Y. R, v) k: p3 C/ x6 l
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ K+ c2 q( d2 G) V# L
i++;
0 f3 g% t2 E1 D# }/ }. }7 X" Q
//if(i >= 4096)
9 H' {! g7 K7 E% S6 J4 u# ~$ @
// break;
: k' v( R" p1 T
% [0 E; I+ T3 Q r. c
}
( f' a0 e! c" [2 ^- H" J6 P' [
UARTPuts("\n",-2);
2 ^4 u* g& r5 T1 ]4 P
}
3 g% w" C5 c8 p7 _, a$ l0 a6 E0 F
}
2 V" _; r o4 z* W" u2 Q, h8 C
! x1 o) R2 I! j* E5 n
}
" }8 e) }$ l2 m: |
5 V2 |7 N1 t. J
* k5 ^+ w6 A e( G
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 E4 G6 Q: y+ z$ Z% F3 A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* K" ~9 i* A7 \$ Z' F
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4