嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* `+ ^" N! g$ T) B* I9 u
Void UPP_TASK(Void)
4 P, \% z( a7 @( a9 o
{
3 r* u: }% r. F* n6 |
0 t4 z; |& X9 _$ y/ W8 V; C
int i,j,k,target_int_count=2;
5 y: o- C" I- j" D3 M
char ch[2];
; a6 b) f# o! T' b" d. }3 N
/ o- O, X1 v) L4 A% D
0 k4 f$ \& u& r" F
: Q7 M9 m/ _6 J+ h; Y, |
upp_interrupt_count = 0;
' o1 G$ N; C2 ^- Z* f% r6 h
upp_error_count = 0;
2 X& c8 x5 N3 V- G
, G" c" O5 D' E$ ?2 }
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; w1 k' w. f3 ]. E8 P0 Y
// Initialize data buffers
2 ~1 `4 ~( X- J
for (i = 0; i < upp_frame_size; i++)
0 y; Z. B* M$ v2 w9 q) H* E% Y
{
2 y! }* C* G- `: K$ z5 h- N* D4 ?( Y
upp_buffer_b
=i;
, D& d3 B, e* K& b% p1 j; k2 @: p
upp_buffer_a
= 0xDEAD;
6 F9 `( Z0 A3 r' [: _) T6 i7 v
}
; _4 H" n+ X5 i' x- D' R* z
/ F# b6 A0 G. O- M! H
//for(i=0;i<1024;i++)
0 r F }/ Y% J c' y a
// temp
=0;
; I. i, D' x% c" B7 {8 y9 @
- B1 s) t+ W9 I7 h
//UPPReset();
( H! ]2 a" y, R9 Q3 P* C
/*启动UPP DMA传输*/
" V) Z) |6 n/ D! l4 Y% u" a* X: ~! z
UARTPuts("upp_prog_dma_i\n",-2);
) g+ j' d) {2 r! r
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. Y" X- N) e }- r6 e
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. u+ ]2 K% |2 U% ^1 S `$ o
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
) N& g) r7 f5 g8 W( c3 z
$ e' z7 n9 {4 F
UARTPuts("upp_prog_dma_i\n",-2);
6 v. T9 A% w+ u k' C* P
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 a4 \' g! _6 s$ D: H
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) T4 c# Z' Y) a2 b# K
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: x4 {% E1 L' x
5 m- U* x3 w) m9 c; f N
/*等待UPP传输完毕*/
& E8 e% z- n4 b- C
//i=0;
: R" b- m$ ^& X6 [( E7 r
//j=0;
3 Y% v% ?$ k& Y, [8 z! H6 j
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; ]3 \2 T z7 W4 T* y. ~- @4 }
{
$ Q. E/ |7 o9 l
/* 测试UPP传输的同时操作普通DDR数据
3 [; Y3 `' c9 q2 ^& Q- l- y
temp
=i;
9 \1 P1 I/ X: d+ i8 N. [
i++;
3 ]8 p1 G; v! D: C+ w
if(i==1024)
+ G2 x/ `* t' }4 n
{
4 I, P8 d7 L1 _/ y2 I5 _& S
i=0;
, n- X, `3 o/ O3 p: a* K. X% ?
j++;
( Z! \( M/ T) L" \" D& t
}
l0 P, r# K% N5 y
*/
) j( Y; p6 U1 M. x [8 U# Y& M8 C6 l
/ Y" s c, O. v
asm(" nop");
( V3 d. e: F7 i9 f- R; b
8 h9 S# P4 E1 U3 J
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 S# L0 U9 E% T1 w4 n2 }0 N
}
7 |6 K- l8 ^& b$ Q9 H
! [3 [/ e |0 i+ D
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( O$ H! X' Z( S2 h r
//UARTprintf( "i=%d\n",i);
* y7 g4 Q7 C0 Y N- C# Z+ z/ V3 m j* h
//UARTprintf( "j=%d\n",j);
1 |; l. _: F$ l6 J
UARTPuts("Data mismatch in buffers.\n",-2);
+ H2 ~: H! x( T1 E# _# k
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ Q, l( K5 ^" ~6 U7 ?2 i7 U
{
. Z( p2 P# [0 ?
for (i = 0; i<upp_frame_size; i++)
9 b$ ~! j# W2 @& s# r. _* M
{
2 l4 @$ h- y2 }5 o
if (upp_buffer_a
!= upp_buffer_b
)
1 I6 _" t! q0 C! G. ~
{
: c) U8 w8 T$ l! B. _9 l: X" c0 _1 o: M
upp_error_count++;
, y, _3 n$ e2 j& H
}
w; Q! O, V o4 k4 h1 t6 C5 q
}
: ]- a: _3 v) W6 q
}
" j8 `8 O, `! p* q ^+ G7 Y- J5 {
) i7 w6 `8 t( Z4 V5 ~' p; x" E
/* 报告通信结果*/
. k; F/ F, |0 l) {: b. L
if(upp_error_count != 0)
' |* z1 j g# ]8 \
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* B9 n- f, K' A) v
else
; A1 Y5 P- L4 j* h* b! j' x6 n; F
UARTPuts("uPP transfers complete!\n",-2);
1 b f) L* |* Z3 s! q7 {& F
3 N" I- Q O3 N: h: t3 A
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 F6 S% ~7 X \4 ]2 H6 Z
UARTGets(ch,2);
# h' _+ ]* T. t6 \0 S
UARTPuts("\n", -2);
Z( \) F: p$ \$ K* z3 p
& q8 V* t( n) E- V8 [
if(ch[0] == 'y')
5 {+ }8 w! q! y
{
; }- W( ^5 D. X9 g* o9 l
/*打印全部读到的数据*/
5 @& U; r" u5 ?6 V# c5 B, e
for(i=0; i<upp_frame_size; )
" d3 q3 u( e. e. W) [) w! |: ~/ |
{
3 d' X& p# M1 K/ }4 q/ J
for(j=0; j<5; j++)
5 ^; h1 H1 h1 g+ s9 @1 B: ^
{
5 f" Z. t8 k0 d, [
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; U5 |- ^2 b; x0 @ X
i++;
- D, B! }* E8 n
//if(i >= 4096)
* g' V8 t/ p# F _5 s* l
// break;
# \: k/ a' {# n- E2 I* n
) S; q" b x2 e) }1 k3 D1 w
}
. g( S4 Z: y$ ?/ w
UARTPuts("\n",-2);
$ L& o* M6 \9 Y; Q+ R4 q+ \6 h# @
}
K" S+ Z% b5 Q: q. m; g# W% j& Q
}
. W. d8 B2 R* k$ p) }) k; o
; m! z8 A1 x$ r+ k) Q/ v
}
: q0 T6 m+ J4 A8 P1 L, {* I: G* E
: b6 u2 }/ T0 l9 P
# [4 @: Y/ u: k m- G" {8 |' e
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" a) k6 M/ I6 z6 `9 q6 U
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ j4 H+ S* a' m5 X; c( |- N0 X, m
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4