嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# o6 r6 C7 ]$ \3 |2 L
Void UPP_TASK(Void)
* z- Z1 \; Y5 a: c( P/ |, o
{
' U9 \8 h: Z7 o
- ^8 u9 B* C$ W0 W: S) b! f# g
int i,j,k,target_int_count=2;
/ x- `( g5 {% f3 Q6 U3 I7 O
char ch[2];
; X6 K% p8 m. g& a. B4 r
# G6 O! f# L" r1 c
8 G, A3 O! R5 r0 C! j
4 z# R, w; A4 Y. x
upp_interrupt_count = 0;
$ F: u6 U5 f0 m
upp_error_count = 0;
9 D+ W, y; o9 `" n" h* y
6 l& Q" b; u3 H" K) R$ m1 J7 t
UARTPuts("\tResetting uPP buffers...\r\n",-2);
. i2 x# _0 W9 q9 S, d$ W( S v5 W
// Initialize data buffers
# c5 Q, @. h7 k$ {. V, w
for (i = 0; i < upp_frame_size; i++)
, W. f) _8 C% I3 ^% z
{
$ D* O- z! y D5 Q+ @$ w
upp_buffer_b
=i;
1 u; R4 |( t$ c
upp_buffer_a
= 0xDEAD;
' p4 ~+ ?) j8 t& f# s+ Q
}
$ e2 }! n. F1 \/ j1 ~# |# h& X# t
- \; V3 ~" d o) p- h* a4 k
//for(i=0;i<1024;i++)
! ?2 C' |% U* B& x: \. k. t3 r
// temp
=0;
/ @5 {( V% K' G* U/ ? m
/ ~# s' o6 J, i
//UPPReset();
! L( Y Y. [* H# R( Q- K
/*启动UPP DMA传输*/
0 l/ `8 B( x. J3 |1 z$ e$ c
UARTPuts("upp_prog_dma_i\n",-2);
- x' \! S- Q2 I1 |2 m! @/ w9 X) `6 @0 R
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, m, K v0 T! b6 P+ P, Y
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* r R* g& M" k
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 w0 u; z4 n5 ^1 O6 B: J4 O
4 R- k& @/ U. ^8 m1 H3 S
UARTPuts("upp_prog_dma_i\n",-2);
" f$ K" O! g5 @. l/ `: S
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 S4 Q5 |1 A6 i; m, P7 T! M8 Q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: R4 m. W0 ?0 s& }2 J
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; u( L8 q8 W5 u9 i$ Q& ~
5 \$ y5 t3 i8 F( Y0 U
/*等待UPP传输完毕*/
- r4 F$ {: G% h1 ~
//i=0;
( Q- H4 h9 c% x, Z
//j=0;
" X5 C7 b5 o8 g
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 c# ~( p# U- t- T
{
4 E4 m* O8 I+ p
/* 测试UPP传输的同时操作普通DDR数据
: M8 j4 w0 Q' p& M- s
temp
=i;
. J B& Z. E0 N" w
i++;
4 l' W- P' a$ ~0 d# y9 F. ^$ h
if(i==1024)
; l' Z1 o' E) e; Y5 i
{
1 ^' l/ {" b) F' G8 O
i=0;
: w4 j6 v, p1 O6 Y
j++;
+ @8 R) j( ?; J; o
}
x7 N# V) t8 o
*/
9 q" u- m) r3 r r* }1 m
- w" e* Y; U( N7 x+ N# b
asm(" nop");
. t0 N$ E, i; _4 ]. N J9 Y. s
7 K6 Y! ~6 N4 M3 u' f
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
6 Z5 V! b/ L- | f( X; g
}
9 X$ d( M& Q$ u0 h
8 A- ]! f% @7 O$ M
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. P" u$ s! w; Z7 V6 j; y- t d6 |
//UARTprintf( "i=%d\n",i);
2 q% ]! u; P2 }1 I
//UARTprintf( "j=%d\n",j);
+ W q5 t+ D: A j
UARTPuts("Data mismatch in buffers.\n",-2);
1 w8 ~- o0 c. X6 O v3 Q
if (upp_interrupt_count == 2 && upp_error_count == 0)
, M8 w$ g- D f* T: M
{
7 N- _6 A* [- m5 F
for (i = 0; i<upp_frame_size; i++)
) v Y! v; W! x# v7 I
{
: b$ Y$ v. P4 }% x+ F# \
if (upp_buffer_a
!= upp_buffer_b
)
% I9 {8 X. J4 L8 w9 k2 ~" q
{
: s/ I% u: s _$ m) O' B
upp_error_count++;
+ |; ~, @/ b# l+ g, j1 }8 J
}
6 K+ d1 k' c8 }
}
& |& g6 F" P9 A5 g, G3 V3 \
}
* @$ P( b$ @: G. S1 B! C
. `/ t, Z$ n7 E' D% a/ X' b* [
/* 报告通信结果*/
( E; U2 D* K) M L8 \
if(upp_error_count != 0)
8 U: d5 B! |5 X, a! a/ t
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; j9 l: S/ \- ]. Y6 x6 | x
else
9 _% _8 P5 n% w
UARTPuts("uPP transfers complete!\n",-2);
* l8 }- z! v9 m9 y
! i, a7 Z* Q$ d2 R5 D! I
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; \# t. j$ c9 ~% a+ f; t! g, F
UARTGets(ch,2);
6 o% P( `1 L5 b. V
UARTPuts("\n", -2);
7 R1 \1 u4 M d: _
; ?$ F& A0 W+ j4 J5 p- b( i! j
if(ch[0] == 'y')
}. Y+ n- x0 ?2 i5 d
{
8 V3 e; _& z; i5 P' j+ W! @
/*打印全部读到的数据*/
& D. z6 |* H+ w
for(i=0; i<upp_frame_size; )
& O( m1 I5 A1 m
{
( u: C+ V+ p% P8 y
for(j=0; j<5; j++)
6 H# c$ Z. h2 T* ]( J( @0 o
{
, ^ y, z1 ?* G M1 T& Z. P- ^+ z4 h) R+ ~
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 i, M* m Z& i2 q b% p/ ~
i++;
/ ]: I) S( ^" e
//if(i >= 4096)
0 X) Q) l, r$ g( B
// break;
* v9 v$ { S% F7 B) u) P7 x7 L! a
; |& I; r: x2 X. L4 c! T
}
. K! w+ _9 G- F4 U+ Z( W- z3 c
UARTPuts("\n",-2);
; [; e g+ w2 ]* `. O" ~; y- v% v
}
: K7 }3 E, h8 [1 ^7 ]$ }
}
' f3 _# y) ?" m1 W
3 G# D' R0 o; m1 N% q6 R
}
$ X/ b n V1 Z! T8 |3 @8 K8 u7 K
, ?( j- n' W# g1 U( R+ a5 z+ A
. J: f5 p, a1 Z% m; I
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
5 J) }9 D5 E% _3 j7 d9 G3 K& h) v
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 }; N8 R+ P0 G0 [& Z6 {/ G: a+ q
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4