嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ h+ X2 w4 w- m% w
Void UPP_TASK(Void)
) n9 R0 Y% Z$ y. M5 ^# c" Q% V
{
2 ?, k) F, O) h' y' c7 B
, G' \0 G' [( t) s' H% `4 v
int i,j,k,target_int_count=2;
/ Q% r0 R6 r! g M
char ch[2];
3 Y" t2 _1 n1 R# @
( J6 N2 W% X W# _) B
! |. T& t( {! o5 w* a% E1 w
$ b9 ^' l) j& Z5 w v; K+ A* K
upp_interrupt_count = 0;
, }& `: f4 z$ W2 X% d
upp_error_count = 0;
: t0 o R% n: I: z5 c; \7 z& X4 n
4 A- g g0 c, U. c3 k, e
UARTPuts("\tResetting uPP buffers...\r\n",-2);
# E3 e* \. s* Q3 I
// Initialize data buffers
" G5 d! {" ^2 Z; L* L
for (i = 0; i < upp_frame_size; i++)
0 s) f& L% m- |, X# d' }6 i! b
{
1 T, n; f/ N, c2 V$ ^
upp_buffer_b
=i;
2 G& J) p: Y, t6 a4 o6 e8 c# u
upp_buffer_a
= 0xDEAD;
7 z! X% u2 w) T# Z: y
}
8 }* x1 d2 P# z$ |9 c2 |, H1 {
4 q( p& c0 R* O8 q: N
//for(i=0;i<1024;i++)
2 k% E) t0 a7 y
// temp
=0;
1 G2 N0 ~1 J! w6 X1 x( f& `
- B9 i3 d H- L) y7 l" q
//UPPReset();
$ P* C) }# a6 O% [) g
/*启动UPP DMA传输*/
% G: q; s6 _) ~% n& D
UARTPuts("upp_prog_dma_i\n",-2);
. y7 s- t( h! H
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 H3 N! m9 y# T6 k& A+ b0 E
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, y* V- s; \+ J1 i) a- q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
7 `3 H3 S7 D% o
8 C8 m. R" k( ~$ }' f/ W
UARTPuts("upp_prog_dma_i\n",-2);
$ l; v) [0 B8 t2 ~/ Y* I$ [! f
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' s+ Q4 ~ q0 j, E0 N2 m2 {
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 l7 E# k& F0 A [; ?8 N
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* o* L( }0 R8 T8 D2 S
+ m- N: m: I7 ] @: K5 v
/*等待UPP传输完毕*/
' X% n, ~: d9 V/ p1 Q2 W
//i=0;
$ }+ K7 }! o( P I* ]' z$ w
//j=0;
7 H8 Q$ k2 b& @1 g
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ I- R3 p9 V% n
{
1 K* P3 ?# r! S
/* 测试UPP传输的同时操作普通DDR数据
, p q) I0 [8 ^+ {6 N7 A* `
temp
=i;
* t/ \8 y0 l5 v9 C" H/ @9 h" @0 t
i++;
6 R( Z4 Q; k+ H
if(i==1024)
; g- F8 i$ j4 S/ B# a
{
- r8 u3 i; y% |' x9 u
i=0;
6 ` r" f/ n( E* y4 |
j++;
" s/ y4 j! T8 X
}
( i5 K* X- m8 k/ O6 h' k
*/
' y# h% ?) g: \9 y% t4 U8 r
& T: o. h: K; c" k
asm(" nop");
4 o9 i @9 H; z: L8 h
( q; q- G# S5 ^6 Z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! d, P8 z; f. x9 d7 G- a( k
}
2 U+ V, Q& z) |( v6 s8 ?
+ b' m, K, I0 v j9 w: a" |+ l
/*检查UPP传输的数据是否正确 (loopback modes only)*/
4 A9 B) t# e6 c6 `. G& v# u
//UARTprintf( "i=%d\n",i);
7 X/ _$ O; {4 x
//UARTprintf( "j=%d\n",j);
B/ }8 P* q6 `, |7 \; R
UARTPuts("Data mismatch in buffers.\n",-2);
, i% J; C- M# Z* m( E; t3 U* b
if (upp_interrupt_count == 2 && upp_error_count == 0)
# D6 W9 \: [4 {
{
( A5 G; G' o$ P. D
for (i = 0; i<upp_frame_size; i++)
. q" [2 f3 @0 o
{
* M- r- i8 @ j$ ^
if (upp_buffer_a
!= upp_buffer_b
)
6 n5 x5 h( g2 B4 X. U9 P& z
{
5 O9 v/ g, Q8 W5 ~3 ]
upp_error_count++;
& V# \1 j- s9 a: Z& s. n
}
: f; ~, L8 E9 ]- ]9 Z
}
N( c- s$ y; o# W; V f
}
7 B% F: ]6 D3 I/ P" M: J3 U6 h `7 ^
+ U9 h3 @3 i( D- P& V$ X! B$ b. {! M
/* 报告通信结果*/
8 R5 Y0 M+ t6 x$ a
if(upp_error_count != 0)
. i# @; N- l4 M
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 D4 @3 ~8 T$ S; M) w* P' N
else
& `& g9 q- @6 G" }# ^0 R
UARTPuts("uPP transfers complete!\n",-2);
# Y+ G$ ?4 t+ o! O! s$ a
6 W$ e% M) R' ?$ i5 @
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 D$ ~/ @8 `. T
UARTGets(ch,2);
, `3 e& d7 ?: V
UARTPuts("\n", -2);
+ I( q5 u* ?( ~5 e5 @" Z: {
# U# b" o& B- `( Z5 }$ T
if(ch[0] == 'y')
. n. n% }0 h( d/ w+ E8 G* H
{
( U, ?2 G$ t0 d% D
/*打印全部读到的数据*/
/ t( v7 k9 t) h6 T3 }6 S! D/ j: v
for(i=0; i<upp_frame_size; )
' f2 c* s9 o$ X3 e# I
{
( P) d7 Q8 v& d
for(j=0; j<5; j++)
2 z e; F5 n1 Y i3 q: a; z: n
{
. ?1 Y# l' \) d8 `& z
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( _$ w! R( [1 d$ F# V
i++;
- m1 x( x6 c5 t1 u' H
//if(i >= 4096)
6 D; N: E( x$ ^
// break;
- L* ]1 r9 s3 q* q: _: R' s; k
/ G" i- I- n6 \% d' ~0 Y
}
7 `2 s, u; Y* R
UARTPuts("\n",-2);
# x+ T! q& k/ v/ l
}
0 p* q9 i5 W6 ]$ Z- w
}
% C, J' y+ O* w
* h1 D; D- Q z0 Z: x- h7 G [8 p
}
# G" D8 u' e% u. X4 j3 C
, ]$ v \/ C& _# U
! ]$ I t( |% X" A
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
& F3 ]* n5 p" P) m& j1 ]
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 u9 l* d$ p1 ~* F2 }; ^
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4