嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ E( T9 |4 m, c% W2 ]( o6 V
Void UPP_TASK(Void)
5 V& R1 ~. r) G8 _- K9 e
{
; }1 W4 `+ y8 I
( U- d3 j' O6 D N
int i,j,k,target_int_count=2;
3 B u: I" U9 G) t6 j
char ch[2];
& q/ |4 Q4 G0 @
- H0 T* K3 ]( `4 z% r
3 P' t% p! @$ ?' t- ]8 O
: Q( r: t5 ~ x, U# z0 s
upp_interrupt_count = 0;
! U! @# ?+ g5 k7 V( _, f! W7 @6 p' ~ H
upp_error_count = 0;
5 H/ @' X; }3 |0 N( k) Z
! g: |3 M/ \) ~& h
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 f4 _0 E# v: ~' u
// Initialize data buffers
! Q6 @# m( G" O
for (i = 0; i < upp_frame_size; i++)
! {5 o) W' _7 {1 p- N l! F+ q
{
' `$ Z7 w m$ r) R
upp_buffer_b
=i;
" C( q% }1 g; p0 g/ l9 C
upp_buffer_a
= 0xDEAD;
5 b4 F% C2 M' C- ?6 c
}
! u4 J, ~! a6 q7 R" ]8 i
' b8 e# X3 P9 n* p$ t, G) e1 ?6 Z+ [4 c+ a
//for(i=0;i<1024;i++)
' e" d. J+ a) {0 i
// temp
=0;
/ k6 x5 m1 O, _0 S- A4 C( I* R
2 ]: J1 ?8 E& }) C/ D
//UPPReset();
2 x9 I- T0 ^6 l* K) h* `; D3 g4 @; ~
/*启动UPP DMA传输*/
4 V8 a1 y3 w, @$ C
UARTPuts("upp_prog_dma_i\n",-2);
i0 T- u: m! L$ |
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, T; Q( f# ` J
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! n2 |3 ?$ Z% @5 q. Z% [
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 s8 x5 F- |+ x) [/ ~& }6 F
: G& S9 O, G5 J9 C& ~
UARTPuts("upp_prog_dma_i\n",-2);
5 H5 k% j, G* y3 R1 n6 h
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 N2 ?# f0 @ ?; n' S! ^0 [ g
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 G$ T8 ?5 S) h9 W
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. i" r. ]. S, }8 t7 q$ c
( R: Q% H+ {3 F6 ]% x h* G7 h
/*等待UPP传输完毕*/
- E+ S2 {: A9 c5 p' K
//i=0;
( _4 O, I( I1 e& W9 m
//j=0;
% t: ^, M C3 u8 L j- [
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' A! i# ~4 @3 ^, Q( }/ ?8 @* B
{
' W, L# T+ h! p) B
/* 测试UPP传输的同时操作普通DDR数据
7 ~0 T l e/ K) l. h& S
temp
=i;
7 S& O* h$ P! w* X
i++;
& I2 O4 D2 m7 J T2 X
if(i==1024)
% ?+ g2 r) Z) S, [- h3 z
{
6 s6 Y" j, v$ ^- j8 g5 n5 l
i=0;
; p% `- `1 d) ~" ~8 h, {5 |( V
j++;
; _/ A3 X; _$ Q2 t; P
}
0 t# w9 M% W9 ~' w
*/
) V( Z/ b/ v" _' B* x! }' A
/ K1 O% k9 P* }# h3 r; b
asm(" nop");
$ _* F* F; Y- K& t R3 i& i& v8 u
- [$ d( e) z: M ]' Z5 f$ b+ p9 F1 _
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 u0 }. ]7 J& F% A- s
}
C; r0 k& V/ t% I. o5 S
; O8 S: ]3 A, B
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% M" G. Y: a5 Y0 g S- T2 U3 t
//UARTprintf( "i=%d\n",i);
9 u* x, p" Y6 Y2 G5 n5 Z b
//UARTprintf( "j=%d\n",j);
# ~5 b- v, B" e; }
UARTPuts("Data mismatch in buffers.\n",-2);
& Q8 H7 y( H- T, i! O0 q! q
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 Y6 m' R1 B4 _3 L9 b
{
7 w. X9 q M' M! I# U9 U4 [
for (i = 0; i<upp_frame_size; i++)
: D) h) n) H! i% [3 G+ h
{
6 s: M, X/ }4 |
if (upp_buffer_a
!= upp_buffer_b
)
+ }/ I; Y4 E0 \# Z
{
% y4 o6 P) j: b
upp_error_count++;
( h* W1 {1 ]- W& L0 G" n
}
' g' ^! D- S V8 I
}
1 U k% j4 P" u/ T! y# B, }+ I; i
}
5 K! h) J* n* M
- u) ?' P& F7 _ _' M3 a
/* 报告通信结果*/
2 T2 q: `( p: ^. p& [, \
if(upp_error_count != 0)
' P2 W( v( s5 k5 b1 c+ R
UARTprintf( "upp_error_count=%d\n",upp_error_count);
, s+ k9 A, H k
else
8 p, i+ P I# t# N" o
UARTPuts("uPP transfers complete!\n",-2);
* l& w# \# |5 Z. u3 U; z, M$ l
& z0 _ A9 w, _. A# I g
UARTPuts("Do you want to print all the data?(y/n) ",-2);
: J, G: U. X1 V; P6 Y
UARTGets(ch,2);
5 x9 d0 ^5 ^4 j! k
UARTPuts("\n", -2);
8 H& i3 F/ m) f& l. E3 y
! x' V3 t! ^3 D( W- C' ~9 \. U
if(ch[0] == 'y')
% q# g- o% `" A v/ `, ]2 X; ~0 D
{
- }4 {- s! y7 g5 \% t* y/ v i
/*打印全部读到的数据*/
0 c0 ^$ u' t: I. W% X0 O6 r6 @
for(i=0; i<upp_frame_size; )
Y- K# k* t) w, T! d
{
3 a* \9 L Z+ C$ ~7 Q
for(j=0; j<5; j++)
7 V; C: b% D6 Z" U7 h* X* Y) G
{
1 |8 e+ U$ z# _1 x0 Q0 W
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( ^* u9 V) `3 o! @
i++;
q7 _5 }; H2 M5 p: L6 s/ V6 }* Z
//if(i >= 4096)
) }3 u. {9 x" p8 R$ e$ { [5 e
// break;
. c% k. V$ B. e0 A6 \! q
/ a- ~* ` q# n7 u
}
6 G; S* L6 u1 \2 S' u7 T/ d0 D
UARTPuts("\n",-2);
" p8 z* R5 G u; w( J: v
}
- q6 `3 l9 b z0 O+ s H) o _
}
/ F+ c } t9 M& H* m
# q* T+ T9 j& r7 d9 ~* u
}
% R' B, @: ] l- C5 O8 z, {& @
+ \8 A A3 X4 p5 d& S
, }1 o/ m d/ b
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" _, N: }$ l/ V3 L: @$ Y u. y" ~
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* I; c; ^9 z" Q
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4