嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 f3 v) M2 X: k& K2 p- d6 ~
Void UPP_TASK(Void)
- N' j2 {* R$ `& ^
{
4 J5 ~, p) D( e/ H W
& K# Z( J' Z# a6 w/ I
int i,j,k,target_int_count=2;
( R: z0 g. h& s9 W% y1 i7 g" n
char ch[2];
1 t' V% c% j2 p- s4 S9 Z0 l
+ y7 |0 o' t2 C' \6 R- @
: W* Z% d, F6 p
5 ]5 g4 j! B7 z9 B0 I- l
upp_interrupt_count = 0;
4 }0 n8 U4 K# l: m( R" n
upp_error_count = 0;
% h) t* ]+ O0 B1 r( E
! Y% C: c& ~! Y& T( T0 Q
UARTPuts("\tResetting uPP buffers...\r\n",-2);
) _$ p' g9 k6 C; i5 X4 I
// Initialize data buffers
; i' V' |% a. F% u
for (i = 0; i < upp_frame_size; i++)
- W2 m9 j7 J: V3 b# w2 m: r
{
( I. T% H0 I. X: z c0 G2 J
upp_buffer_b
=i;
5 g1 u; g2 f8 ^, `
upp_buffer_a
= 0xDEAD;
: B$ i+ t# H- R3 ^% a5 c6 R
}
$ K9 X. S' N/ H6 S4 Q' l
4 N0 X/ {# C& l5 H, H* D
//for(i=0;i<1024;i++)
# W" q4 B' e1 x6 ~9 M
// temp
=0;
: d% e& ? d5 `& |; H Y( h* q) c
/ _$ H9 A9 i8 m! f$ _" \4 c/ ?( X
//UPPReset();
) V4 ?/ t$ F+ ~, u& T0 U( j
/*启动UPP DMA传输*/
3 J& b% N- S- A9 ?8 x8 R, M: z
UARTPuts("upp_prog_dma_i\n",-2);
' ~; ~* r1 I; F/ g, W" t, {3 T
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% }" ?* N) [' a1 U: N a
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. a8 @9 H5 M# {0 B
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
; m# |, W& t# u. [
; p+ c6 w4 T. ~9 C8 p% u
UARTPuts("upp_prog_dma_i\n",-2);
! L$ O& O0 D9 \5 _9 M( h
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 I& C3 }! r: M
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# E/ w+ {, g+ l/ V/ m; d
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! |2 c% {2 p6 S: m+ H0 ]
" [' u4 F1 e# |, M; e8 X
/*等待UPP传输完毕*/
/ h2 v4 f( `% X P1 ^% W2 m
//i=0;
+ m* }3 J0 b9 ]
//j=0;
4 l0 D8 q5 @+ L9 l7 s
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 P* q$ H5 n o M$ V! C; O3 \. k! q G
{
7 C: R( F5 t |) I D3 E
/* 测试UPP传输的同时操作普通DDR数据
" }9 f( J- |/ I: }
temp
=i;
9 h7 W( l; L4 ` S
i++;
6 P# t/ j i" W7 P" k
if(i==1024)
# o9 H0 m$ j9 a& f
{
1 X4 O+ f, ]6 ~5 k; B! }8 c; e# R, k
i=0;
/ } Q9 Y+ P, d5 b: ?' m! `1 O2 I0 \
j++;
% J' R$ `9 _& a" Y. ?* g7 p
}
# b: J' o2 p: Q( s( c
*/
5 ]1 l q3 R: J
1 _$ b" u; E* D% R$ O/ u
asm(" nop");
9 K5 c9 M( \! x: Z! a/ a' F) p
) A1 `! }+ {, r) h6 g
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 C3 J: r% G$ j* ~
}
; q6 m6 J9 _# m+ T+ E1 m
8 v2 @' d4 i0 y; s! {9 w5 v6 t3 }
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( I& Z6 K" ^5 {2 D: l
//UARTprintf( "i=%d\n",i);
* h- O2 Z8 z9 F9 G
//UARTprintf( "j=%d\n",j);
- B6 L% q4 T0 `7 F
UARTPuts("Data mismatch in buffers.\n",-2);
! G! l. w; i: Q @1 W, _. G
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 d5 G9 ?9 X5 v
{
: T/ @" R7 m w" p* G
for (i = 0; i<upp_frame_size; i++)
: \8 |" x$ w# Q/ n
{
3 `2 O2 f8 F G1 y6 I
if (upp_buffer_a
!= upp_buffer_b
)
# c% V0 v) K$ b9 t# C Z
{
8 @; Z- y! E. _
upp_error_count++;
6 E& p; H e/ u/ u# R& O
}
& Z8 S1 n8 {. @0 w/ v; s0 s4 E$ r& |
}
4 U0 Q3 a1 Y- N: P W
}
- z% `7 q) e$ J
- ?7 s' N9 H1 ?5 g6 j% a
/* 报告通信结果*/
u* m7 G$ U# p- d4 ^- V9 T
if(upp_error_count != 0)
: b. q5 o9 w$ f5 f
UARTprintf( "upp_error_count=%d\n",upp_error_count);
J- ?( T2 u$ ]
else
% M* @, w, Z7 J$ P/ t
UARTPuts("uPP transfers complete!\n",-2);
9 X% Y' ?$ k3 J d
4 ]9 }2 K( C7 C
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 S! g1 j9 W1 ~3 z! M6 t
UARTGets(ch,2);
9 u* b4 |3 B& u5 R8 X. P
UARTPuts("\n", -2);
4 i( T* P0 {5 [
( {7 L$ s( d% l2 X; M2 a6 Q
if(ch[0] == 'y')
8 W2 T3 e7 w; ^3 n
{
& H2 {, Y x2 G* H1 y
/*打印全部读到的数据*/
1 j9 s+ `: \& Y8 u) E: M
for(i=0; i<upp_frame_size; )
- @# P) R4 T! ]5 Z+ B' S* R
{
6 W) S+ h5 G. G( J* A: ~
for(j=0; j<5; j++)
: \) L* l' }0 ]( f3 ?; k
{
# F& |! w7 s) V, x( U7 c, U0 H; r
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* v: C5 [% B( [2 B
i++;
6 w. k, _; S. f% O$ K8 ~1 g0 p
//if(i >= 4096)
% i5 t9 A9 l8 h0 I$ T9 [
// break;
; R! s; `5 F6 }/ @
% z' O5 e- X3 j- \$ |
}
. z& X, Y6 \: |9 Y7 w; A; X1 p
UARTPuts("\n",-2);
; j. y- z a; I# f: \0 Z
}
) D4 f5 J) f% v- n0 h7 l D
}
- P) d+ F+ W7 A4 k r* c+ G
) Q# n: ]( H ]" s6 k& y
}
1 ?! }4 `! U" F% p# K
8 G/ F( }7 ^% a% b# C
+ M, ?$ t3 o, r: ?1 h
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 \9 M. X. l& l7 ]1 {; `1 f! X) Y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& @) `' ^6 o' @* t; C* P
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4