嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 Y8 I6 k* ?; @* |9 T0 U6 s* b
Void UPP_TASK(Void)
) ~" ~+ u3 u4 s( F. H. ]- k
{
1 A% l- {. r4 H, g0 Q4 |
1 w* I! }5 d* N$ c8 p% a
int i,j,k,target_int_count=2;
& J# a- s9 I0 h
char ch[2];
* N; X7 x0 {# I5 G$ Y C
3 i4 ?" n! Y* h4 P+ v Q A
; R+ Z. P+ N) ?. s2 ~0 X: W
: i2 y; L! ~7 r6 I: e
upp_interrupt_count = 0;
/ F* {0 I3 k; J( ^: n- k, m
upp_error_count = 0;
; _8 k/ K! A& ~9 |
$ j8 F7 e5 g) _ t( D
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- L4 w0 ^+ G$ ?7 d
// Initialize data buffers
8 p: b, T. F+ W1 q
for (i = 0; i < upp_frame_size; i++)
" t% C# ~( C# f
{
$ x Y* j. T3 ~7 M/ ]6 ~# y6 [
upp_buffer_b
=i;
+ A) R5 F9 a' x& q3 n" }; y
upp_buffer_a
= 0xDEAD;
! P- V8 y. p, c' }5 X' m1 R. [
}
0 Y$ u, T8 j. H7 S. N0 h" i2 D9 Q
5 Q( e t) G6 H
//for(i=0;i<1024;i++)
9 W0 Q- |' H" ?0 {; |
// temp
=0;
, ~+ q4 \/ E+ q Q$ H
7 s/ ^9 B7 D, k; U
//UPPReset();
2 f1 y5 _$ D- _( \0 `
/*启动UPP DMA传输*/
) Z$ H' _+ v$ |& L: L) c2 L/ l# n
UARTPuts("upp_prog_dma_i\n",-2);
5 f- z0 ^0 y( V& h' @
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 y/ k: j$ H- @& b
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
l5 d J; V" N# C( e6 c
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 b1 e1 h7 b7 V' E* v! t
$ r) ]6 E! e) M0 p7 x4 i0 \# W2 g1 `
UARTPuts("upp_prog_dma_i\n",-2);
3 S/ ~: [$ G W% ^
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; ?8 d4 T: b8 t% _9 E* x
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" p& ^! U- w- ], S$ P" H# \7 `
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 p0 S! N h' G5 ]- w; d2 R
! i4 o+ ]1 ~% @9 t: C
/*等待UPP传输完毕*/
; K& v- |5 M7 z) o i
//i=0;
3 J2 h! U% `( R
//j=0;
1 p6 ^5 z3 t9 `, v0 B) a& y- F
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* ^- h4 c: A& L
{
2 l% q8 V1 a$ L1 J; @" O) A
/* 测试UPP传输的同时操作普通DDR数据
- N. s0 Y Y3 p+ z" I8 M% m
temp
=i;
! o8 f: C- b! I+ Q8 \9 R
i++;
2 _3 {1 e: i: m- Y" `! u
if(i==1024)
. D6 d# E$ @6 s2 Q/ C
{
2 N3 P Q7 \' O! ^( S4 b! G
i=0;
. v) A# N3 L0 ?
j++;
( z8 B6 P+ n* e7 Y+ z3 G
}
2 S4 B ?6 Q2 C$ |% i5 z+ M
*/
# p# b u" n- f; E8 w$ _9 Z
( D4 m$ I! ` y, {) l% D- J
asm(" nop");
( A: g" {4 v* D% V
! `5 Y9 g; ?2 B$ I7 P/ ^: c5 b
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
" b0 v6 t6 G# P3 B: A2 `
}
8 _$ q, v6 T9 X8 Y3 M
0 U% t1 k, |1 C- T1 r" x4 K
/*检查UPP传输的数据是否正确 (loopback modes only)*/
3 r4 h1 m! B( _7 @
//UARTprintf( "i=%d\n",i);
7 C4 I; Q" U- |" t z
//UARTprintf( "j=%d\n",j);
: D7 y) m! T- ?$ c8 E9 O% I* Y
UARTPuts("Data mismatch in buffers.\n",-2);
- r0 Q0 W5 O' N# [8 F1 O
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ t1 c9 j* p, [6 ~9 z C6 W" q
{
; `% F! X1 h+ m' Q, j
for (i = 0; i<upp_frame_size; i++)
- ^; u, O7 P# u& `/ W9 H* U+ z
{
+ c7 G5 ~; \: O" n0 t
if (upp_buffer_a
!= upp_buffer_b
)
: Z9 N1 l2 |6 \+ b* ~
{
; C" \9 `. `$ t# m' p) d# j
upp_error_count++;
4 r. T% S O( U' }! |( X7 w
}
& {3 {: D$ j6 ~( K: l
}
, b4 `' j4 n9 c, M
}
5 d8 B9 ~& D+ h# c6 s+ ~- U& `# _
4 l, ~$ p8 {( J4 i
/* 报告通信结果*/
0 p) i. V6 e$ j2 ~+ e! v
if(upp_error_count != 0)
9 j o; G. N: e0 W# g9 ^) E
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 M% X2 K! z- T# V# B
else
/ h# P/ N, l1 w; h. a: Y; e
UARTPuts("uPP transfers complete!\n",-2);
5 d% g) |" @9 F3 k# K
7 [' m S9 r2 [6 Z
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 e# `2 i _( d2 Q4 Y+ \
UARTGets(ch,2);
; u7 U0 Y$ K9 c3 Q; T
UARTPuts("\n", -2);
# W' T" r" I1 O2 H; `- Z8 Y! I; l
8 X' @/ G' `- S6 y6 y
if(ch[0] == 'y')
Z# ]. r$ W* p/ }
{
# k/ U& u) Z) d5 B
/*打印全部读到的数据*/
/ ~, N. e/ t3 S$ R) E* T* P
for(i=0; i<upp_frame_size; )
4 V+ P l1 O2 ` P6 [& t& e3 z
{
6 u1 k5 }) B( j' ?% g
for(j=0; j<5; j++)
' ]3 ~, e: D% O* [- n
{
: a6 ] A& y& u3 `4 D; M9 e& {
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; c( r# W- d Y1 B6 _
i++;
3 M8 @9 |1 ^8 T& M
//if(i >= 4096)
9 w/ Q" E4 V& S! _. S. v
// break;
8 p# |# a1 G# O# l+ h1 N
% k3 d# m% S9 ~/ T: c7 x3 l' n# C2 D
}
$ Q. X4 w2 ?- B# u, I0 U1 p, _
UARTPuts("\n",-2);
- K! |+ W" d! _- Z3 t5 t
}
" k/ ?4 M1 J* d3 E l" R1 n
}
# d$ e5 [& w1 m1 H- t& ]
3 v3 y8 R0 b. P9 A) L+ _$ j
}
' Z$ G4 ]5 |7 s% m
. _4 G% R) N2 u7 k
6 u' v- O# g; Z
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 M! G& |. u/ e" k4 v
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ ~- r4 E, x/ }. a' L4 W
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4