嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' c, d. e. ?. O- i. `$ K, O& I, i
Void UPP_TASK(Void)
( K, J3 l% K* X* a k" r! r
{
! A+ c: \* b1 q! }
* _8 W" T( _! x$ a# N
int i,j,k,target_int_count=2;
}' j3 z, G$ X z1 R4 S _8 U
char ch[2];
+ v' H! H: Y! J1 `: c; h9 V8 E
8 `$ n4 z6 \8 p J! ^
1 j, H" I3 L7 F( f1 V K6 N
0 x# t9 ~. h: @9 O
upp_interrupt_count = 0;
( \, K1 @" N7 |* b4 A. `5 Q$ N+ v" G, a
upp_error_count = 0;
4 D# v( T. J( f$ |9 Y \; X0 w6 g
6 P! [% b' l3 x3 \, f
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- V+ k j2 v1 d8 E" K" `
// Initialize data buffers
& ?; A8 E6 S l: C- D O
for (i = 0; i < upp_frame_size; i++)
% Z0 @+ A9 V6 f& u) n1 T" B
{
$ a( m F0 M5 Y! t3 y
upp_buffer_b
=i;
. c) s" M! P6 K4 n; l8 ?- U/ L7 A" Z
upp_buffer_a
= 0xDEAD;
% {2 q8 B5 m0 J8 H
}
* [1 X' F& g. K2 ^# C
) B i& c7 o* w: G
//for(i=0;i<1024;i++)
5 B! l" N1 C! s" Y8 ` s
// temp
=0;
9 Q- d5 S8 E+ s; r
, o* r1 O& i m! {, T. N0 |+ O
//UPPReset();
( e1 B4 b2 O1 d( I
/*启动UPP DMA传输*/
/ w2 i: y2 n; `1 S! J7 D
UARTPuts("upp_prog_dma_i\n",-2);
2 k0 n: Y' }$ @. O+ g: m
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# K# y% Y) |. w" b
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 e# r5 i2 v) q( H
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 `$ A" {3 `3 ^' e
2 q) Y: o- g" v7 D4 x2 q' F
UARTPuts("upp_prog_dma_i\n",-2);
' x8 q8 n5 n& }' F$ H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 u5 Q" w7 |2 r0 ^' F' {' Z. u
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 M2 i$ J& p" E1 {$ h4 h- t- ^
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ C. W, T1 l6 y8 H6 e7 C1 @
3 D. X" P3 e0 A0 F# T
/*等待UPP传输完毕*/
* Q$ M5 Z/ @: c5 j& F+ S* ]2 x S- @
//i=0;
- v7 g5 m+ l: N" ?" C* w
//j=0;
& d$ |' V# |* `& M2 R
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" ~# p4 U5 L1 K8 }
{
) b) W2 }) h7 y# [+ r
/* 测试UPP传输的同时操作普通DDR数据
H' ~( G, L) W, i5 t+ }# \% Z
temp
=i;
& Z! }) M7 c: v
i++;
% ^7 c& @9 I! X+ \* ^: G, y
if(i==1024)
/ \8 k5 K7 ?7 o! f* \4 g. g3 A
{
4 G. _& g3 _& X; _& q1 o O3 u
i=0;
# ^" @# o2 k4 J0 K
j++;
2 p6 }. S+ j$ V. P! t
}
1 b+ m4 `2 u* S# ?
*/
j0 G% v7 A2 i0 Q
2 Q( ~+ k/ T0 N" M4 T
asm(" nop");
* m1 f+ W/ o) Y
' U2 L0 ]; T! ~8 K) E6 R, e
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
4 ]) K; y) r% x
}
; {3 [9 v$ `. ]5 X" [1 f$ C# _) S
. d5 t( o0 r, t. l/ T! U* r) }
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 G7 n( ]# w( E ?& S7 z
//UARTprintf( "i=%d\n",i);
2 ?3 _: P7 t" u; ?1 a3 p" }
//UARTprintf( "j=%d\n",j);
3 \$ |, p4 b0 U g+ A, w' Q( z
UARTPuts("Data mismatch in buffers.\n",-2);
9 H$ o" N0 t( G0 p6 g
if (upp_interrupt_count == 2 && upp_error_count == 0)
& P( @+ M+ d+ o: Q: h+ w8 `
{
# r8 j& l+ i& ?3 E2 q$ |" h" x
for (i = 0; i<upp_frame_size; i++)
5 F+ y. N, }# t; F9 }* S* k
{
; [& f- O3 u* Z; X" x# H5 u
if (upp_buffer_a
!= upp_buffer_b
)
1 P1 \ y! v: V; k* j5 i
{
: U7 y9 v8 q6 K, T
upp_error_count++;
& F5 w* A$ y8 P( v8 A5 ]
}
9 M( u4 b, U7 J1 m, a6 f0 t; _& I
}
: |& {7 ]% U) V
}
! C3 I9 y9 |. R( r# c
9 V8 [% |$ Y j1 N( w
/* 报告通信结果*/
9 R2 y; \ p$ R+ L
if(upp_error_count != 0)
7 I/ Y8 l/ M$ G; q4 X
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% r$ h. ^$ Z2 v0 w4 ?+ V, K
else
: u& ~* a3 X$ a0 z# Z% H
UARTPuts("uPP transfers complete!\n",-2);
5 G0 S; C/ ] Q6 r
6 l8 Z, F$ r, |4 A3 C
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- S7 h1 g% _" {5 u& U0 Y6 }
UARTGets(ch,2);
* K8 O: T s% C# j6 j8 r/ o, U! l( w
UARTPuts("\n", -2);
8 H6 F# Y) O- Z7 q/ }" e
2 Y3 |! f* \# w9 J4 {
if(ch[0] == 'y')
+ P4 ?, O! g& z
{
/ B6 @+ Y( b" W
/*打印全部读到的数据*/
# t+ w' Y- B9 D$ U3 u5 K: g# z
for(i=0; i<upp_frame_size; )
5 Q; K' w9 `% M% E1 y2 [
{
8 n+ U4 Z. D1 x' i
for(j=0; j<5; j++)
0 L1 ~7 N4 s# x' e- k
{
. c) U5 q" z8 @
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 ~2 B/ U$ b5 x* _8 @- P! h
i++;
& T* C$ t0 e1 ?! E6 U1 Q* o
//if(i >= 4096)
2 x1 a8 I0 J a# O2 L+ D
// break;
" o. n# }0 F6 k% z1 ]" @8 {
! X: A8 A( d3 w3 w+ p' ~4 g/ \8 _ f
}
$ H# j, c/ W! s; Z: `% \: k
UARTPuts("\n",-2);
# |+ o/ B+ i: w& ^# N' Y* `0 j' h/ o/ p
}
/ T/ Y% F- ?4 t( a4 _) a$ @
}
; E, O& T, y7 D+ E6 Z3 N
5 t' f* b! [& f a# A
}
- R2 M! G/ N2 a) s$ g ?$ D
, C7 ~7 i% z& m( ~, u. Z; C
4 j! N# y/ H3 k' ~
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: q# v6 V' H% j+ N6 _( t$ a
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 Y* k( ]* G; l, {' }
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4