嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* O2 V& y8 q/ ~5 C
Void UPP_TASK(Void)
- W3 O% \( E& S
{
' U K, [* C2 a$ b" K: p1 I
4 M0 i1 D: _( j/ _4 u
int i,j,k,target_int_count=2;
4 X4 s3 Y2 U9 M7 i! {
char ch[2];
. r- s6 Q( j9 p9 N2 U' Z
* j b1 M; u2 U( O! t# U
; \! G& g' O% q" G, x
# A" D( @5 m8 K5 m! Z7 h
upp_interrupt_count = 0;
: u7 {) K8 N! G! }8 { L
upp_error_count = 0;
$ ~5 U: ?7 U o8 g5 L4 k
R( o, T! r3 Z
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' ^8 ^9 x7 W" E4 U# Z% Q( t
// Initialize data buffers
" [" u$ V) w. b: q* p8 u
for (i = 0; i < upp_frame_size; i++)
4 u7 c/ O& y5 z! z/ {8 |2 f x2 M
{
5 I) {2 _, O/ O/ B- k# j% Q0 L
upp_buffer_b
=i;
! Z4 q0 X/ F+ }" y
upp_buffer_a
= 0xDEAD;
% b/ j3 s' m2 A! Z/ h# e# W
}
; ?, Z; w! L: E" L6 u: u G( o
( `8 b5 G& X. n9 a Z2 A( @# Y
//for(i=0;i<1024;i++)
/ u# \* w! e Q8 G
// temp
=0;
1 x3 v' @9 \2 e
5 B) U# d* {1 x4 X: O2 Q/ x
//UPPReset();
: J/ W- M+ P* N5 R2 R+ b1 f
/*启动UPP DMA传输*/
0 W* |# X& ]% P2 v% M2 |
UARTPuts("upp_prog_dma_i\n",-2);
7 L* T+ R* s: u7 |
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( {+ O9 D6 p1 H8 j8 A% z5 R" i
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 r5 k- j0 t$ Z+ q) U7 o+ K
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" u4 t3 k3 S1 Y4 J
; ` g: @4 ?8 |5 r0 g$ A
UARTPuts("upp_prog_dma_i\n",-2);
' k/ N" T t3 T5 S5 C( {/ |5 `
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% p( E5 H/ y" t9 _
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, E" H0 @8 t$ W! I7 c5 |
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' a+ |6 S- I" n [0 ?8 V# M3 E' P7 E; J
/ h: `$ I3 y2 x1 o
/*等待UPP传输完毕*/
6 K* N, M" H6 @+ R6 V
//i=0;
) e- \2 t( g' J& Z: L
//j=0;
- |' I# y$ C7 f& {' ^
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# C( T. x/ Z+ u) e1 \5 H6 _
{
# S6 e5 m; C) w
/* 测试UPP传输的同时操作普通DDR数据
! Z! K# ~) `! O5 a# \
temp
=i;
% }: w! s7 R! ~
i++;
2 v+ `: D0 |) @/ N
if(i==1024)
1 F* M. G8 l) J( N5 m. i5 Z j6 Y
{
8 G8 B' r4 `* G2 e, B' {, U
i=0;
, T+ n* A8 ?) I* q
j++;
0 {- E$ X$ T; T# d2 @9 ^
}
4 J' t. T' a/ m6 S
*/
+ D6 L9 m$ g0 G- b
1 ^( F' l J, P
asm(" nop");
) k' |3 ~/ Y0 V/ H. l8 _
1 O/ X+ s( E+ n8 z- H3 n5 a6 q
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* R' J( x/ @+ a1 j- i: [
}
I+ i6 Z8 f4 i9 M) t F) s% U% ?+ V
" [9 H7 B/ l0 k) }# h
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* i9 ]0 m! T' C. @5 N" p
//UARTprintf( "i=%d\n",i);
5 K4 I$ ], I c8 S- V' ?
//UARTprintf( "j=%d\n",j);
- c# L7 Y6 _8 m8 E) k$ l6 C% n
UARTPuts("Data mismatch in buffers.\n",-2);
7 J+ l9 x% ^% G
if (upp_interrupt_count == 2 && upp_error_count == 0)
. l3 K2 y. O6 X: K
{
9 K3 Z4 J4 o) z" E) h$ b4 j7 Y, c
for (i = 0; i<upp_frame_size; i++)
3 }8 L1 Q5 G' x* l
{
4 h. j1 L, Q$ v+ Q
if (upp_buffer_a
!= upp_buffer_b
)
* w2 Q K; t+ x" W1 }2 ~
{
- w' b) R1 U: F$ `+ E
upp_error_count++;
1 u7 s) G x' l; f: a+ e
}
* X* y0 x' W7 b6 N
}
, p1 x* p6 s5 n; Y' R- c4 }
}
( L3 Q; ?4 e5 C- J; m
0 C: ~' F* F! `' ?- ?
/* 报告通信结果*/
+ T% c p% F0 |$ R7 U
if(upp_error_count != 0)
0 e+ E) U3 T% j% _, ]; m. E
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 |1 g" O8 I: i; E& H
else
7 b" L2 \0 w) \( C5 R+ t
UARTPuts("uPP transfers complete!\n",-2);
" E& K9 k; q- w) I/ x1 e3 W
1 K9 ~, q1 K" V' @$ [# R" \
UARTPuts("Do you want to print all the data?(y/n) ",-2);
% y9 H, G) [8 g* w3 z2 \9 {
UARTGets(ch,2);
) b( W$ ]7 L( G4 f7 q1 z3 {$ }7 ]8 {
UARTPuts("\n", -2);
& _1 D# n8 p; ]! k
* U u; ^# e. r% V
if(ch[0] == 'y')
! k. `2 L- I9 R- L3 g1 Z; O- }
{
4 }6 J6 e' ~, O9 C* W+ G; R
/*打印全部读到的数据*/
$ j0 s, u9 T9 D3 N: s8 t
for(i=0; i<upp_frame_size; )
' T( Q' J$ }5 x
{
9 [' h1 T' K, G! P, f
for(j=0; j<5; j++)
8 o8 Y' T) G1 H! k
{
2 G: S) r$ I$ E' K
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ X! Z/ [ d7 e, @" |
i++;
" x7 e: c# `/ A. A" @3 q( S
//if(i >= 4096)
5 z: ?& n- j+ F& L. g @ @
// break;
$ Y1 n$ u' w3 u* O- X/ U9 f* Y; l$ A
( g" ~4 w0 g8 h
}
T6 _) j3 b0 d P2 x
UARTPuts("\n",-2);
6 I# [* c7 K2 l3 g! F2 n# I, n
}
# a/ k0 e4 i, U3 _* J3 Z
}
- n: Q% S: G% i2 I* H4 c& S1 o
- E0 O$ y$ Z; ]; H$ q+ |* i c
}
7 x' L& x B% K1 c3 G' i3 P
; k1 b4 t* a! d- q% }/ B
0 H1 r9 M* O, O! `- R
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 T3 T# E% d# ?# j
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, d' o# `( o9 U9 C+ B$ V
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4