嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
, Q6 T M0 p4 Z$ f, x
Void UPP_TASK(Void)
5 n( M: R; n; o' ~/ X3 T
{
) \' `* `$ `7 A5 L5 p, B2 j
6 |& \- i4 Z; y3 c# K, l
int i,j,k,target_int_count=2;
( X# ~( y# l4 h7 p/ V& W
char ch[2];
% N1 ]* I+ a% u1 r l7 J3 F
9 b1 m- Y% ~" U
5 ~% E% [: I1 a$ E2 j7 `* J
/ z5 A: C5 t4 q% A
upp_interrupt_count = 0;
# k( i5 `" D0 H" m/ {+ t
upp_error_count = 0;
( P: C. `" I" v1 D3 c) x# H
6 k# z: E: C; ^6 p
UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 ^* b4 C( N2 T; s3 o# Q
// Initialize data buffers
; @/ I/ }, ^) ~0 {7 B
for (i = 0; i < upp_frame_size; i++)
( d0 Q0 A. f6 ^: }% G
{
& R9 G& L3 ~/ j
upp_buffer_b
=i;
4 }( [' u; A+ b4 C, v
upp_buffer_a
= 0xDEAD;
$ H4 n/ y) ~3 p {/ L& y, K0 Z
}
7 n% [$ C/ E' [) H
' T" Z. t1 e2 ]4 W6 y4 T0 l* r
//for(i=0;i<1024;i++)
$ P7 J) Y+ P% g9 Q0 J( N6 W/ @) t
// temp
=0;
' q9 T2 x4 A4 |( I
0 }5 z( v0 n9 ^" Z: f
//UPPReset();
4 I3 j7 L+ n% q" H2 \+ t
/*启动UPP DMA传输*/
* Z E# @. k2 H9 G. K
UARTPuts("upp_prog_dma_i\n",-2);
7 Z! X/ R9 n/ u3 u: A) Y# y" \+ s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# e X( c$ A0 b/ v: |9 g
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ K% @: T9 l" c& [7 d: z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
5 H) U" H8 R# a h: d- x4 [
8 g- V+ D3 N: _: q
UARTPuts("upp_prog_dma_i\n",-2);
_2 P+ @5 m4 K1 A8 d$ l8 ?3 o7 g
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 h1 h+ L* |7 B) |2 Y) _( f
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 m) ^8 p1 w; k0 c8 g' o V
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: ]1 q$ f# E' J7 Q
" J& C7 h# w& U; K1 I4 M. u$ e+ B6 u+ O
/*等待UPP传输完毕*/
# D8 M& K! L2 e3 D3 e" _) ]
//i=0;
3 b) o5 B+ a2 ~, j! A& g" X% p# e
//j=0;
5 V* ^5 p1 L8 K/ Z
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" n- V ~8 }: N# c* C) n. p# l
{
o3 e \. Z/ W4 H2 B
/* 测试UPP传输的同时操作普通DDR数据
& ?4 B+ w: o# l- |" M X4 U
temp
=i;
& s% J. k/ c% `; S1 I
i++;
9 b; V7 ~! r& S) T
if(i==1024)
4 g5 Q& B( q: k) C' U
{
0 U5 b7 R: Y* w
i=0;
" V7 d, T: K P
j++;
6 h( z3 H& _* c5 I' V! w2 Z# V
}
/ K+ R2 o0 ?$ U) W: s4 ]
*/
( |* I) [- o1 x7 Z+ Y+ a
' L2 y' }# ~' S; I" u6 v
asm(" nop");
1 B, N" X+ L) N9 ^
8 a/ Y# A* @& J z- L1 d# ^
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 c) f I4 V" z& W! l+ M
}
3 Q9 p0 u$ P4 K1 [7 p* P! [+ Z
; ^# m D9 v& g5 s* b
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, A# x# q3 L% ?3 l n9 x1 X* K
//UARTprintf( "i=%d\n",i);
2 t# Z% W5 Q* _. Z$ W
//UARTprintf( "j=%d\n",j);
+ c- E! x' J* j; {% @8 r8 D
UARTPuts("Data mismatch in buffers.\n",-2);
( W+ q0 C. Z; ~# E3 P m
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 d7 |0 K( J [/ F9 \2 ~, Y
{
+ N) ^0 d$ N) m* `/ X
for (i = 0; i<upp_frame_size; i++)
; t# L/ |, z1 k0 o( v. y0 M
{
% G6 l9 }3 ~; M+ e+ L
if (upp_buffer_a
!= upp_buffer_b
)
/ s2 M) ^1 O/ A6 V" e ?
{
/ ? q( m. {$ D4 ^0 J- q( X
upp_error_count++;
6 @9 e3 C4 J' P* e, T: }
}
+ Z8 x' @) D, M( g6 l
}
0 P- d3 i6 r) |8 t- V
}
# p8 S6 L9 }5 ~! J4 P) `8 S
3 q. A- |8 r# m, p' d- }* q+ I
/* 报告通信结果*/
' }1 a5 g6 b: R4 T; Y6 E! ]/ I
if(upp_error_count != 0)
' Z3 `8 s7 s* \
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 m" {8 W2 O. H: o: X8 e
else
" B/ ^; a; q1 [8 l* Q% w3 }
UARTPuts("uPP transfers complete!\n",-2);
: H; b B, F6 i3 M& W v
0 e$ s5 Q4 P. L( q2 k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
. E7 k! S* o- \$ Q$ r% R
UARTGets(ch,2);
- P8 l4 A \2 e2 |( b! N5 V
UARTPuts("\n", -2);
5 B! z$ b& P+ o9 T& P9 _
9 W1 I0 ]5 t+ K! ^1 l4 q
if(ch[0] == 'y')
# ?6 N' Y% f1 Z. Z
{
. q! {. Z! ^. v" G% s% o! t' A' G
/*打印全部读到的数据*/
! P$ q# F+ M8 u- N6 c$ t
for(i=0; i<upp_frame_size; )
$ K! V4 z1 f6 K; `3 P4 I$ r
{
5 q/ W) F3 n* z
for(j=0; j<5; j++)
+ j2 M4 m+ W& O* y& ?# X
{
$ L+ b; f1 T. ~) A
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. W; Y% b, U! v6 w8 |' ~( D
i++;
1 e# ^# m y u) F. F$ ~
//if(i >= 4096)
& ^) j# X& {& I8 U
// break;
u! J+ Q! B8 r8 H8 G Q
# y. g9 H" n. R* ^: ~/ X) J; G7 O
}
0 p2 ~( Q: x, ]2 F* Y7 r, z
UARTPuts("\n",-2);
) t+ W9 F' x0 Q# {
}
) N6 X" o) N3 N* f
}
! ^( ^$ r8 r) o5 F; T
0 q/ l; i% ]1 P9 z& H) K! s
}
$ b3 T% y1 v/ W2 J U# x3 n
$ J3 Y# y/ Y! q W3 O
- x7 N& ?3 N* A8 v4 s
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; s6 j- V" M2 J _# | O
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 A) o- X5 Y _
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4