嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
) w+ |# O" x# O1 t; s
Void UPP_TASK(Void)
1 m+ @5 r! ^- Q' p3 l
{
; N1 G! }2 B: N2 x0 g- V2 l" \
6 [( n. |3 I, N! t# a
int i,j,k,target_int_count=2;
' |& y) y4 G$ E3 y2 v
char ch[2];
9 D, }; N4 ?" S$ T
5 Y! E' x1 A2 w: {9 y8 }
) a6 R" `7 z$ }& a
- V& r" i) s0 B1 J) n+ a4 p: Y7 i
upp_interrupt_count = 0;
" J* B; y, \0 X$ I
upp_error_count = 0;
5 ^8 c$ t' m( z* }; P
7 u. x& X3 s9 ]
UARTPuts("\tResetting uPP buffers...\r\n",-2);
+ u7 q7 e; F' I$ c
// Initialize data buffers
1 s% ]/ U3 j' }: `
for (i = 0; i < upp_frame_size; i++)
* f& w7 m0 M/ h, K: C
{
- m) C Q4 x( O# G3 m
upp_buffer_b
=i;
4 S7 Q# l$ `, u/ c* V. R' r# e7 K
upp_buffer_a
= 0xDEAD;
8 V8 p9 x1 B* p
}
, s) ~2 E4 _! }0 h
+ b* Z# c/ x' `6 l/ Z
//for(i=0;i<1024;i++)
7 v& ]1 A4 S" ^
// temp
=0;
2 d* b0 _4 P, g1 W9 }
" Q! `2 z! l+ b4 P4 M" S: i$ j
//UPPReset();
6 X* y0 M, w3 {3 L' U
/*启动UPP DMA传输*/
! {. I3 h9 S& G
UARTPuts("upp_prog_dma_i\n",-2);
) \) Q. W! |4 ]% _8 S
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, w& I" ~6 u, N- I/ C2 k7 C# z
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( y0 s5 q- o9 D; c
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 w9 M/ m. d. x( j3 K
8 G `3 [2 n$ i5 F1 i
UARTPuts("upp_prog_dma_i\n",-2);
9 a2 U$ P. @; P1 f4 F) K' k
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! K5 r4 z6 j/ }; O7 ]
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 j1 w6 g' M! x3 T/ d7 g# N
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 T2 k! t9 `" A3 `
; u; J8 Y& j6 a4 C+ Y* V( D# f. D
/*等待UPP传输完毕*/
& i' c( F0 N: h O* o
//i=0;
7 |! x3 q+ S$ M5 Q
//j=0;
2 O. ]7 N0 }5 ^" _' L
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( ?2 ]. V$ d; t3 J7 ^- D1 D& J
{
, T* q* V( M2 i) Q0 f
/* 测试UPP传输的同时操作普通DDR数据
; r4 e4 Z/ F6 ]4 Q
temp
=i;
' t. a9 r1 c( P. Q- v
i++;
! q' k5 M8 y4 _" t# B3 ?3 z" W
if(i==1024)
6 p& k9 V w8 K6 f |; F, [0 d- ^
{
/ L ?* A4 M! s! L
i=0;
6 B! K9 i( h8 h) |* ^, l' U
j++;
; v4 H! m! T7 d: @# F
}
: P1 @3 q9 x, V8 J
*/
4 Z- C' D) T4 B! ]" T% u8 G
6 l. Q$ r% r5 ?
asm(" nop");
' V! m" z6 m7 u M
( ~' ]9 r( o" M4 H. |0 |
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 @' @7 k. S0 x7 {3 |# P% _
}
, I; c4 j7 Z7 M( v: \( B" U
3 L; _% v8 o$ U8 s6 j" A$ H
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; M5 d: x }0 J+ s5 r$ O
//UARTprintf( "i=%d\n",i);
5 w6 O! M. q/ \- D
//UARTprintf( "j=%d\n",j);
, ^2 _0 I4 A% U
UARTPuts("Data mismatch in buffers.\n",-2);
2 }6 A$ h, E' r3 w
if (upp_interrupt_count == 2 && upp_error_count == 0)
) \ H7 V% p5 R2 H3 [3 o3 u$ x2 T
{
+ v- g( `5 F/ K, W
for (i = 0; i<upp_frame_size; i++)
' c, H( Q! v. N) ~
{
, y0 x- s# X* I+ G" Q
if (upp_buffer_a
!= upp_buffer_b
)
; p9 ?: v9 x; \9 A9 h4 E$ H' ?
{
8 w" b' K" }& Y, j: m; q' n
upp_error_count++;
0 |- p" P& q/ `. k# x8 Q, E
}
$ z" Q' l2 i+ b0 C, [& t
}
% R3 i/ n) K4 y: M& q6 H- C
}
- ]) z4 [3 m. s1 J
. a3 _& E' J7 y9 m
/* 报告通信结果*/
1 m0 U9 W8 y3 c/ {- l! F
if(upp_error_count != 0)
9 P: |6 J; B8 E% D8 t7 L- h9 w3 }
UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 V. Y% a. \3 ` M& x/ A9 F
else
! g2 o4 t' a% g& K) e N
UARTPuts("uPP transfers complete!\n",-2);
9 n$ C& P' ]. }! S
' p7 F6 E5 ^4 _( l
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- t' g1 r3 C7 T- U: y( N- _ h
UARTGets(ch,2);
' T' e7 P$ b8 `, V7 }% F- }
UARTPuts("\n", -2);
, }4 r! ~; x4 d7 S2 M) t+ N5 J+ M
' x3 i' k8 m. k* D% e& t
if(ch[0] == 'y')
' |! K1 ?: z3 r" R' a2 E
{
# J9 C: n7 z& j O8 q& F0 g' w# Z
/*打印全部读到的数据*/
( |! k X" ^3 i) B% [
for(i=0; i<upp_frame_size; )
- E7 l; B0 T1 { z1 }8 M! \
{
4 U! w" l8 }$ y8 L$ i
for(j=0; j<5; j++)
! v$ o+ Y0 B+ x6 ?1 k7 x2 k
{
! V0 I4 W. j5 \+ Z1 R
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( a( n: d8 y- D2 U4 {+ R# Z
i++;
* w/ l, O. q; \0 N c
//if(i >= 4096)
5 G6 [, @8 x4 x' W8 @. C2 Y
// break;
4 [( F: @3 p6 V, S" b
4 o0 _0 {/ g& M7 p% Z' U
}
+ { f9 W! m- u% |
UARTPuts("\n",-2);
n/ r4 I5 H4 b6 | a
}
% t* O" T7 _* O+ W- N' ~7 e( |
}
4 O+ N2 h: }" t1 z0 K( M
4 P* z& D2 H2 l! h) r
}
2 X1 W4 I' |4 i2 d& w e& }/ d1 I
/ A& a; w+ E8 k% ?
/ ^, K7 | L4 {
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 Q" Q% R$ J1 t, i I V0 d- L
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) q4 l0 Y# l( a
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4