嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: S: @# Y+ L7 ]7 A. O; i
Void UPP_TASK(Void)
/ e" B |0 v8 h; u
{
* C7 l- P$ T9 m2 N5 Q0 A' k
7 ?4 O/ I3 j+ q8 p0 m
int i,j,k,target_int_count=2;
; ]: ^# T& D0 g% Z, ]9 r/ q$ z G
char ch[2];
& V3 v3 g9 e6 X( h) j5 C- Z; D5 L
" ~- B1 `+ Z2 W
+ p6 _# X$ U+ R+ L3 Z, I0 O" L$ L
6 f+ r: g. b; B& |2 T! ^
upp_interrupt_count = 0;
2 J! `8 \3 L' p0 U! \
upp_error_count = 0;
1 R* P7 h- J+ i9 F
, k9 z: s' E: M/ c/ M
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- P: r6 Y5 n, |( f; G9 R. H
// Initialize data buffers
! \' y7 U8 T. w( v
for (i = 0; i < upp_frame_size; i++)
8 F, ?' ^$ F! U$ e4 a2 Y
{
0 Y. [. d$ y0 H1 q0 }8 K$ G
upp_buffer_b
=i;
/ \" r5 ]$ f2 R- [6 t9 G
upp_buffer_a
= 0xDEAD;
% t2 M8 B9 c& A4 O/ F0 l$ |, J
}
/ X: B& O- m- @' a0 f7 n
$ x! O% k& s7 i. u+ q, K7 s$ x" U
//for(i=0;i<1024;i++)
4 b+ S$ ~& [( P
// temp
=0;
2 W$ Z& f" W$ b; Y* D; g- U$ O+ N' L
) W/ t8 D3 N/ n! _( t
//UPPReset();
) ^/ u" i: z* U
/*启动UPP DMA传输*/
1 q* A1 A" _. N' O
UARTPuts("upp_prog_dma_i\n",-2);
* h' P/ D G0 S9 }4 ?
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
! O5 i* V1 J0 |# m) ~0 m
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 j" _* I) x# O. [3 s, |/ f
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) I+ v. C, R* d
: }( ?5 v& e4 m3 K
UARTPuts("upp_prog_dma_i\n",-2);
' Y5 w5 J2 c0 L6 b& S! U7 |( ^- a
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* e* n) B, T6 {. \4 K: l1 c
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) r5 ^) ^' O8 e" d
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 T8 G5 h. S" C. i
5 }' ]6 X4 x$ j
/*等待UPP传输完毕*/
7 B# z4 ]- P' d/ I4 m
//i=0;
9 R F# ~$ ]6 W
//j=0;
2 P4 |% {2 u% Y+ B8 M8 B4 X( C
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- s0 X5 g+ R7 K9 e% k& N
{
4 g' ?; {8 c: l4 N5 Y0 W; {
/* 测试UPP传输的同时操作普通DDR数据
7 ^/ x, |9 {' Z6 R6 ]- Q) d* n% P9 D
temp
=i;
: i' J; p: P* O
i++;
0 I- k8 E; x( }" {- ~5 T
if(i==1024)
; W: c/ h/ K% B5 d* E* ^6 |
{
& A! \: T! ]! p) E
i=0;
2 M3 o) _/ F/ Y) a+ T$ H, p- m" U: d
j++;
( Z, x1 M1 y! c
}
2 k0 J6 V' t& W& U
*/
1 O6 U" q9 v& g, E D
2 o7 p2 N" d x" U6 [1 r1 k5 Y
asm(" nop");
: A5 G: _% B1 i0 c2 j- K6 l" B2 \1 `3 L
+ T4 p! o* d9 _/ f* \! X. z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
& n8 s* N2 e0 r3 k. \
}
# M, Q# S3 h$ U7 a* s2 p+ b
/ J( l. X1 I9 i @# A
/*检查UPP传输的数据是否正确 (loopback modes only)*/
6 j, W8 D& g3 C; [+ _6 w A8 H
//UARTprintf( "i=%d\n",i);
! d- t+ R3 x: k! l
//UARTprintf( "j=%d\n",j);
1 k% k& s( T8 k4 v: m- j
UARTPuts("Data mismatch in buffers.\n",-2);
" k5 A. v4 E; f
if (upp_interrupt_count == 2 && upp_error_count == 0)
* N# K; M) w/ c2 h
{
( ^' q% G# V* Y) l' z- o
for (i = 0; i<upp_frame_size; i++)
, p/ r' e9 |( ?/ y. B+ p7 g: O) Z
{
7 I: p$ o/ n% _$ f4 g
if (upp_buffer_a
!= upp_buffer_b
)
! e; O* L: }) x4 V& m* V8 |
{
$ D+ W: Y( e+ p! d% p o
upp_error_count++;
2 K; E' F6 q C) v
}
: B& _/ X# o% \0 U; t5 N' R; v
}
. a" C+ z, W% |
}
. X3 d ^# m" a/ }# j+ p. ?
7 [6 x1 n: \' I a' ~
/* 报告通信结果*/
4 u! X. O# C) K( s
if(upp_error_count != 0)
1 h0 P% w" r" n( [/ P: A. t1 E0 m
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) V- l' P' Q6 V
else
2 G, B1 @3 f! T1 V9 `
UARTPuts("uPP transfers complete!\n",-2);
9 `3 c) M0 Q* P- o& q8 U
( \6 }4 g* W, D* |2 ~3 b
UARTPuts("Do you want to print all the data?(y/n) ",-2);
1 q5 U! v! e0 V; u; i7 u
UARTGets(ch,2);
# h% R* t: _( w r
UARTPuts("\n", -2);
* `% h+ J8 X$ G" I& P/ n
' O! C* `4 g6 w2 B3 Q) }
if(ch[0] == 'y')
, }0 v5 b. `( O) o& p
{
' g, t& F( H# o# t
/*打印全部读到的数据*/
. W/ W5 j8 s' {+ X( M! V0 e
for(i=0; i<upp_frame_size; )
7 b" m( G+ ~3 S% s( v! P
{
( _5 K; x; L: F$ T4 K1 v
for(j=0; j<5; j++)
; [( Q2 t8 r; }% ?/ }
{
0 z9 {1 B3 m/ m: S) |# T* t0 W: {
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# e' `5 Q. l9 J/ d# I* h6 n$ Z
i++;
3 R/ W0 {( [* L8 r: Z: f
//if(i >= 4096)
3 M/ B- H, @# c7 j
// break;
% f, `" M) |/ S( R# n# K
8 ^, }. G9 I5 M- Y* D9 I
}
, H# O& u8 |, c5 t# F3 k: U# K6 Y
UARTPuts("\n",-2);
% i& \% w# [4 b/ N. ~ I
}
0 T0 d2 R' x. E: o. R
}
- T2 H, i7 }5 n+ n- |" J2 W3 |
0 P) d* f- E! i
}
6 g! E! q! c! Q( R; m: q
% y* ^' b) V! a$ ?; d" D. C1 s
, D0 ^: h1 l/ G. N5 `& M3 v
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- U, I2 f$ p8 w" z x
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' |# J' d) G! Y* _, V
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4