嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- n0 ?) Z! V Y' `( p! ^% |( S
Void UPP_TASK(Void)
& z k" a. |/ s. C
{
% I5 y* i+ N/ |9 R$ A. t. R
! z; {1 ?( }" `8 f% i
int i,j,k,target_int_count=2;
* ` o9 _+ z8 H: Y2 }
char ch[2];
! G9 e! C& `7 O7 e% f7 v; M
. I: T+ W7 y2 e4 Z! P$ o
: n5 L9 Z) |/ m
. z4 _: C1 T0 k* {
upp_interrupt_count = 0;
6 l) y# y4 g4 ^. k
upp_error_count = 0;
! p) t; ^! |9 O- I0 B
7 L' F7 X( f6 e; n
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; ` h. K. s- D+ m* w
// Initialize data buffers
, s' v1 V" f0 a# q. {
for (i = 0; i < upp_frame_size; i++)
" C4 b4 ^( w( p' X
{
( R( o2 y: e: v, P; S
upp_buffer_b
=i;
5 u* L. n) e k7 r0 E' c2 i8 T6 o# L
upp_buffer_a
= 0xDEAD;
3 t# g+ x5 @6 I \
}
- f) `5 ^7 I3 g
; I4 y& T& p+ y) q6 g9 r0 R/ k
//for(i=0;i<1024;i++)
8 y" i9 ?; f. G0 g# \7 `) C7 D3 q
// temp
=0;
, W+ r) p& c" ?* H; }
8 }4 P% i2 b. y( `/ l
//UPPReset();
3 ?# Z. d0 J3 A& Q; I2 I
/*启动UPP DMA传输*/
8 N# h, v4 D- K0 w! ]& M
UARTPuts("upp_prog_dma_i\n",-2);
& C9 Z3 M" v. }8 R: R' s! [
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 d( d. X5 w6 T5 Z4 @ p6 p' K
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 y. S: v5 Z4 F( {) s
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% m, j3 B: O; |+ O0 F1 o
1 i! \. u! O" O- T6 Z& ?
UARTPuts("upp_prog_dma_i\n",-2);
0 u4 ^) c% x/ G1 T
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# M* X0 p. }, u; _3 F
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 k+ V: X w6 X+ b
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; N' u2 N; `6 | `5 U ?$ N
4 E- b3 V& {3 j" D5 e! l0 s' q
/*等待UPP传输完毕*/
- ^1 j8 n) {' I" z$ Z1 P! i% g( a
//i=0;
- E3 y- R. b& j7 u- K5 u0 _8 S( E
//j=0;
; z9 T9 d- n. ?+ Y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" y- D! ~, z s/ r, K$ S
{
5 t4 z) c, I5 F& P/ n T4 n$ x
/* 测试UPP传输的同时操作普通DDR数据
0 ?' D5 S t) i
temp
=i;
9 f3 }% C/ P+ _2 S8 Y. ?1 q+ F& G
i++;
# u$ w2 S V! n9 x! U2 }
if(i==1024)
# K0 U# [% F5 { d
{
, H3 {3 H3 }1 a ^4 p' J# a' \7 I2 T
i=0;
. L& C" l$ ~, }) n, E
j++;
& _$ L" K" h/ Z* {5 \( z
}
) S( u! P9 d6 s! }1 H1 h3 G
*/
h) ?/ l' r! \
8 f9 L8 A4 W' h7 h6 M9 _3 S
asm(" nop");
( n1 u* K6 M, f: b* R& o
! U3 [' U8 j) B& W# Y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
: f, b* Z- w( v/ D j' R
}
$ X. S2 q& `# s. h: G3 L& S
9 A% g/ t. U% U3 s P5 z7 g* P6 K
/*检查UPP传输的数据是否正确 (loopback modes only)*/
V ]" Z/ @7 y# f1 }
//UARTprintf( "i=%d\n",i);
) `# v: A; g3 ^! V8 [" d: w0 f/ E0 K
//UARTprintf( "j=%d\n",j);
4 m! y, c8 ?6 D0 v
UARTPuts("Data mismatch in buffers.\n",-2);
2 y" B- v$ D' N5 N6 q% c
if (upp_interrupt_count == 2 && upp_error_count == 0)
" i1 q8 E3 I0 q: i
{
2 N& T# t3 D; _$ O5 J
for (i = 0; i<upp_frame_size; i++)
2 L6 Y" {+ T# Q9 E
{
$ {/ L* [% P5 n
if (upp_buffer_a
!= upp_buffer_b
)
5 _$ _, {) M& H5 U) N0 b, |
{
1 a* |# J3 L6 S+ h
upp_error_count++;
7 Y. i% ^5 O0 Q8 ^& c2 Q8 u
}
6 r" X# `1 k4 A5 y. {
}
6 K8 r0 u/ r/ k
}
1 G3 H x4 ?+ S' H+ G( A8 t3 M; Z
! X2 _0 y X. d- q% @% E
/* 报告通信结果*/
Z8 q5 P g/ ~ O
if(upp_error_count != 0)
- \8 s. o9 i: J/ W, ~5 @
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- i ]- f/ {: W& f* A
else
' z, F+ ^4 a4 y' O) B- w6 Q2 n P
UARTPuts("uPP transfers complete!\n",-2);
4 n" h5 l: o! _; K) P% N
, e/ E. v# W7 X L2 N" {4 D5 O
UARTPuts("Do you want to print all the data?(y/n) ",-2);
# O2 n' P' o! y- J$ B* B/ A
UARTGets(ch,2);
6 @* ^8 H6 ?% ^& O" J9 T
UARTPuts("\n", -2);
$ c7 F1 a5 O$ a, J8 }
+ l5 e% P5 t# s9 C2 [+ ]. w) t" i- Z
if(ch[0] == 'y')
; s$ m% W D% D* m v
{
& G; l: Q$ @" g
/*打印全部读到的数据*/
; |$ t: y) S7 [/ M* q/ f
for(i=0; i<upp_frame_size; )
1 q. k$ j0 _9 K; ~4 q
{
: t0 j0 ]6 `0 F8 R3 Q
for(j=0; j<5; j++)
: o. k3 ]1 t. `1 m: `* u
{
5 x, T. I) T4 C" t8 K, [) h" z" W
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 M3 e+ m; Q X# z& D, i* u
i++;
6 c j4 g5 b1 O; `: d K
//if(i >= 4096)
4 B& J9 V2 \* n2 h- P/ ?0 o& C5 w# Z
// break;
) }: q9 t- k8 d! l
1 U8 R4 q4 l2 A
}
7 B; o" W( E" b, X4 |: k- e q
UARTPuts("\n",-2);
& ]4 [# @8 ~$ [7 Y9 k
}
# N& t/ A) }" n; z( E
}
( i; J4 M% w; N4 O
- }% D6 g* R. F9 O
}
( W- ], X9 G9 ~- e# W2 s; e: O
" |+ W. s) A+ m" B' j4 R5 q
4 W% y* R4 q1 @
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& W# a: \" ~5 y2 {7 u2 t2 p
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ S' J+ X8 ?; B y* b
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4