嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 e9 ~/ K3 b' R, Z2 m; g
Void UPP_TASK(Void)
+ e8 g5 n7 H* I& s \; R
{
8 T' ~* | v4 q' V
4 a O1 ~% K& A( L* W# y
int i,j,k,target_int_count=2;
& w! ^+ A* O# N% @
char ch[2];
6 D3 V, f- p; _$ B0 y
7 g8 ~9 O' o6 e# O
* g- l% `/ Q2 t* _
; Z! U" {% w# j' n3 x/ {5 w% H2 I" a
upp_interrupt_count = 0;
5 e5 h6 l2 S% ?, j9 k! p" r
upp_error_count = 0;
1 Y0 l ?& \0 {8 m( N y
! P$ l. ^& g5 [" u [" _6 j
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: \/ [+ T' J+ D4 v
// Initialize data buffers
# p# [( n, g+ y
for (i = 0; i < upp_frame_size; i++)
. _5 ~0 f+ @+ r: Y U
{
8 P# B# g: A8 a
upp_buffer_b
=i;
4 r3 \- ]" B3 b$ g9 w
upp_buffer_a
= 0xDEAD;
4 l6 H. c D. f' A
}
5 H* |1 c3 S' @: R9 f/ P
& m# O9 y+ k7 m: l4 t
//for(i=0;i<1024;i++)
; P% _: M1 W( [5 r Z6 r' J
// temp
=0;
5 L% h+ \# e, _5 }
4 W! L3 w3 R5 f+ C* C% ~5 d
//UPPReset();
9 f' B6 h0 v. C* \( S' ]& [ C
/*启动UPP DMA传输*/
* D9 b5 B1 S- n" @6 c" ?3 ?5 k
UARTPuts("upp_prog_dma_i\n",-2);
3 O' s2 z+ B) u8 A& l/ A0 p) K
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; O+ @5 p" @' W& C- p
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 U0 B5 j# D3 E) l
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 b; K% t7 D- x' ]& h. Y
' J" \8 }7 l: @5 b2 x3 l
UARTPuts("upp_prog_dma_i\n",-2);
7 I9 `" ]9 B) H# n# A
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ E! a/ c2 y. b6 }- Y. W& N9 e4 E
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 l1 [4 U. f* q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! F) Y7 j* S' _: M
+ f( A2 e" d& [5 a5 u5 R( {
/*等待UPP传输完毕*/
2 ^# S. m! _- m% L, Y7 N3 K$ Z
//i=0;
0 D3 ?9 w- M' k; u* N
//j=0;
) e& y" h( k2 s
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
0 k0 W9 ~7 v# E _% R
{
3 g- ^4 a+ g6 h1 e! A
/* 测试UPP传输的同时操作普通DDR数据
& ^; i+ Z- P/ r0 {& O" ~' N
temp
=i;
2 }2 ~, F2 ^0 ]2 v
i++;
- u ^ M- o, ?8 l) K, V6 v5 W" E3 m
if(i==1024)
! E8 v# ?1 w& O
{
; B! t! e4 a# m
i=0;
9 G& T, r2 V3 O/ Y
j++;
6 c ^, S+ F c1 u0 q9 ]
}
/ Y7 v7 v- H% h' K4 M2 ?8 v5 A
*/
% B! U M9 O; v# j) }5 J- q
3 `; Q9 l1 x7 K& a) L( }
asm(" nop");
( {$ M& L7 m) c( s# R
6 x4 F. M, [% ?% @/ M
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) I+ p. M; I& Q
}
! ^/ H3 }$ o/ h( C1 d
; [7 ]/ x5 X! H
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# m; n: F* S! e. q/ _/ a
//UARTprintf( "i=%d\n",i);
7 W* h: a) V# w' v9 E7 b
//UARTprintf( "j=%d\n",j);
7 d" [* D4 x) E
UARTPuts("Data mismatch in buffers.\n",-2);
) q$ |- P9 m% V: k4 \
if (upp_interrupt_count == 2 && upp_error_count == 0)
9 Z# H" u5 Q8 L; q& W3 Z# Z
{
# d3 ]0 Z/ n9 e( m/ W
for (i = 0; i<upp_frame_size; i++)
5 r N: ^, L0 m+ g& {$ @, p
{
) P, D/ }! b- I8 {1 Z
if (upp_buffer_a
!= upp_buffer_b
)
+ K8 `; o* z9 B8 d) f# ?
{
( E/ j! ^& E. `& L
upp_error_count++;
3 E5 j6 c- d9 V D+ s" m
}
9 @, X. f; G' @8 ?; v0 G1 c" Y
}
2 e. z6 c: Y! b# X6 _
}
/ D; `/ l# t" q* ]
" y% `* {& Z# @( E* w! W
/* 报告通信结果*/
7 Y+ f/ o! }3 V9 E$ f
if(upp_error_count != 0)
9 H* R4 l% y& J
UARTprintf( "upp_error_count=%d\n",upp_error_count);
( {) I; n% B( ~0 h4 [/ K
else
9 `) j. g8 d. u5 @: g
UARTPuts("uPP transfers complete!\n",-2);
0 F% F, s4 V% b2 \2 F! a
& i' B$ M5 n8 }
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 {4 A: W1 e- \. L
UARTGets(ch,2);
. ^% g2 }% q2 f$ P
UARTPuts("\n", -2);
3 ~" [# H. m* T' \
& _2 B$ E$ Q, O( f1 H; J
if(ch[0] == 'y')
1 Z9 h) h: ]. h8 h. s) z+ K
{
4 b) U- [% E. _* h' N; Q
/*打印全部读到的数据*/
4 w; o" G) S: L4 n
for(i=0; i<upp_frame_size; )
- U8 \. E }: \3 h6 w, @
{
8 y$ j. ~& n6 M/ ~/ j. v
for(j=0; j<5; j++)
; k& G, a. R. a" t& [
{
I1 k7 F: H5 x( N
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 z! | Y( r* f. b
i++;
8 m s- x' J" |+ _5 a! D5 j
//if(i >= 4096)
* K6 H1 \; A6 A+ t" E
// break;
; P3 m; o1 u. [* p4 k, W
: [9 p+ k2 ~3 \9 C( u, w% _
}
8 y+ @& _2 I |' L6 d1 _
UARTPuts("\n",-2);
, R) v2 {/ n, }3 u/ Q
}
: [/ j0 u, L& v1 \* D2 D
}
( f4 ?9 E4 |9 x
- T* Q m0 `; M [) M. Y. ]! Z) N
}
* K! C- l9 P2 o( G
2 W) ~. n5 {3 f" K0 W
$ n7 r) ~/ H: \
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 R# s$ W, l! i/ U
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 b+ S' O7 i3 R
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4