嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
; A0 {+ ?( u$ C/ f
Void UPP_TASK(Void)
I5 C+ ^ Y" Z$ B& E$ e
{
2 J; l4 ^% w/ C) \
; g s/ B# m; O1 W+ ]& O8 g: F( y0 q
int i,j,k,target_int_count=2;
" }) A; h$ ^6 o, ?0 K4 R Z
char ch[2];
: t, n5 U' T! q4 l, _$ V9 J
! Z, s4 ^; G8 s
* I/ u) E+ k1 k2 y% E
* K) L4 |% s/ C5 z3 m o7 A
upp_interrupt_count = 0;
; S6 _9 q2 Z1 |, W* N3 p
upp_error_count = 0;
4 k/ m+ j! d/ C/ v- W- y
) }( f0 p# |6 G4 i% G# O: H
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# r% O8 c$ ^5 ~, ^. j4 q
// Initialize data buffers
# f8 L/ V; r7 P6 K' j8 k. k
for (i = 0; i < upp_frame_size; i++)
# p% x( z7 | F4 I# Q
{
6 x! `* F0 v/ F' C
upp_buffer_b
=i;
' Y2 {# l& L4 K# w$ l
upp_buffer_a
= 0xDEAD;
4 E. i& `6 S E
}
- d' B8 r* b6 a* @/ J# Q% N" Q: M3 P
; a' L6 W8 n0 P; J3 A
//for(i=0;i<1024;i++)
4 {' ~) x# ?7 p1 O- E9 U
// temp
=0;
; Z h3 A# w* w, L7 S
% b3 i" G. F6 Z% q4 S' e1 F
//UPPReset();
4 O+ w7 e5 l! U% k
/*启动UPP DMA传输*/
( {" [9 C/ F* c7 }8 F- o/ ]; Z
UARTPuts("upp_prog_dma_i\n",-2);
% s' J+ A* j; K3 o$ W4 K8 R0 P; e
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' U" Y' ~* r0 T4 h& ~, Q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! C- z7 s5 J: A) M& C. r3 g
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* V8 v: b- a# p" { w& w" g
5 | }2 [+ b# }9 w; W2 _7 q; I+ Y8 r
UARTPuts("upp_prog_dma_i\n",-2);
# y3 L0 j% p+ B1 O* t7 u
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
V _9 j) e$ g0 `5 B; w4 J/ j
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& a- d" E; M) y8 P. ~1 l9 w" C
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* }5 z9 }4 ?6 B8 G7 U4 S. a
7 a6 M2 C" q- C
/*等待UPP传输完毕*/
0 K q9 S" I% }3 e; [
//i=0;
* S4 o% N- O" \! d! a7 S2 N1 n
//j=0;
2 d+ `: h: X8 @" x4 @ B2 d
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: \3 {6 Y; k& t' Y8 W& E6 \; f
{
% `# K; g; \- {* S6 k- h4 s n
/* 测试UPP传输的同时操作普通DDR数据
' y% p% [1 V r" |8 O0 ]+ f
temp
=i;
, J7 T( w# x. r. D
i++;
) N1 g1 y8 j- w+ O: d9 [
if(i==1024)
9 R% n( R( h9 B% B5 M( p4 c( {
{
3 o5 j) m |' {& l; H. ~
i=0;
% i& f+ L: d. q. E2 k
j++;
! S' t9 m) B3 N: L
}
) r9 K( Y u/ e
*/
) r9 p; P+ S: B5 M+ h
5 @5 R8 N |6 @4 B6 q. d
asm(" nop");
) P0 ^* C- f1 k0 i5 h" B
R5 A0 u3 x# |7 L
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" L- w, F' R5 ]6 ^
}
( l3 J( |% N g6 v/ [
, s1 R6 Z% H, j J2 N" n5 s( V
/*检查UPP传输的数据是否正确 (loopback modes only)*/
V5 H# ~9 H, k9 P1 c: f
//UARTprintf( "i=%d\n",i);
% C: F( A9 ~4 ]: @' W) J3 }( o+ S
//UARTprintf( "j=%d\n",j);
: @' s/ j) b4 G- c/ w- r# ?
UARTPuts("Data mismatch in buffers.\n",-2);
6 ^2 z# \# m- D' I/ h8 w
if (upp_interrupt_count == 2 && upp_error_count == 0)
3 [$ W& n, Y* @7 l) T9 h. i; U
{
# |* V1 i" x! i- N, |9 |
for (i = 0; i<upp_frame_size; i++)
- S& v8 @1 {0 m% c" L" H; r
{
9 o( Q1 B) _: w$ g
if (upp_buffer_a
!= upp_buffer_b
)
5 T Z! C' g8 G2 _+ m* |# ?8 T
{
+ \; S8 y8 L& m7 N
upp_error_count++;
, Q ~; n. s5 G; n. `
}
) X( V" P5 R8 q; G6 P, L; {" n4 q
}
* |' Q9 c) H$ _2 J8 V
}
, T9 w8 E, q2 n' g% }
% ?1 }/ Q- g- S" `
/* 报告通信结果*/
) ~1 v, @2 N: v: K) n5 y
if(upp_error_count != 0)
; M! i' P! e! @/ R5 Z+ D; R' K
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 H! t V$ C3 M- ?
else
' l; } K" _. e0 F
UARTPuts("uPP transfers complete!\n",-2);
; \0 K5 _# K( S0 z+ v
+ V5 I# r" W8 ?- V! ^
UARTPuts("Do you want to print all the data?(y/n) ",-2);
! X. o6 x6 h. B% N8 u
UARTGets(ch,2);
, Q b: ^% _1 {# Z R
UARTPuts("\n", -2);
8 ]" @# _1 v5 k: K' n `1 m
" `. z* {1 e3 F3 R
if(ch[0] == 'y')
5 V6 L$ a9 j6 L& V7 O+ M
{
- o' g0 X) ^4 `! P6 E+ i: J
/*打印全部读到的数据*/
% w6 V0 d/ E ~% v3 F
for(i=0; i<upp_frame_size; )
9 `' x( u( x: h7 D
{
9 V0 v6 p7 o& U; J2 d" a* k- g
for(j=0; j<5; j++)
2 ]4 l! W& C# W; z* f' U/ y4 Z6 ~2 r
{
4 B- P& T# E: H$ o2 E
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- \% I$ t) q! J; h0 ?, g: ^
i++;
* I. [) d5 ~3 K: F2 w+ F
//if(i >= 4096)
5 P g0 @' T5 q8 E5 F! {# L: n2 ^- z( ^
// break;
- p' N+ B3 Q1 k9 C/ v' @
" }6 A! ]' ^% I) u8 g
}
/ I1 d1 Q6 R( o4 y9 B! s3 ?- R
UARTPuts("\n",-2);
; Z2 a# D3 C0 \9 b: s* h
}
: Q0 M2 k/ R& s1 F) v- \- R
}
, K C& t0 d; `) r: m
y! u3 j, K( V! t% l
}
: ]& Z" U# S. g7 V6 ?
. N; _( u! K: _* k3 m4 x/ y. m: G
. ^7 [4 i' k, i
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% A2 V/ T$ M* \* c2 y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 \) m6 f6 `" E, G
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4