嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% c) Y9 N) y: D% ?! c0 P
Void UPP_TASK(Void)
/ }0 V5 `3 |4 _# _1 }
{
( m% c+ V+ [( l) |( c
, S- ^! f& ?' |2 M
int i,j,k,target_int_count=2;
2 E- X6 f4 {( i# r4 {' h
char ch[2];
$ U6 @5 Z/ M7 [4 w; ]& G& @
: [4 |6 J# A: A
& Q. \) x9 z9 L9 p: M
8 h/ \- g2 A' G3 C0 j
upp_interrupt_count = 0;
% ~7 z" @( l' ]! ^
upp_error_count = 0;
( m7 Z( P( {. K: J8 j/ X# I
$ e/ x, x6 W% P2 Z) [! j
UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 B5 N+ K; s% g! X' }) }
// Initialize data buffers
2 E+ G7 f4 v; Q, w' `
for (i = 0; i < upp_frame_size; i++)
+ v! U7 h% O/ s6 [0 U( p: _
{
# `6 F# V1 k0 x/ D- V
upp_buffer_b
=i;
# C7 {% e3 l( S5 \! R4 r/ C6 k
upp_buffer_a
= 0xDEAD;
- }3 l9 s5 x; B; O% H
}
4 y/ h" ^3 K; N5 @
/ B/ w. ~ s- }6 p
//for(i=0;i<1024;i++)
$ V% M' I9 w# m, u* Y3 c! E* s
// temp
=0;
6 k/ U) c3 b9 S8 }$ I8 x& E
: Y! c. @1 Z3 O( s7 V8 l$ t
//UPPReset();
) |+ L) }) Y+ s% J5 G2 l
/*启动UPP DMA传输*/
5 _ h0 M, v3 r, h/ R0 a) C
UARTPuts("upp_prog_dma_i\n",-2);
) M+ Y7 [# Q1 X, `# }# {% d. K
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; U8 C. G( }: C6 T' _5 S
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 H- _" ? a' i) T
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
5 e" I( d. U' a/ n
& G4 v; c% X) {/ O$ r
UARTPuts("upp_prog_dma_i\n",-2);
& N0 r! q$ R; b3 D7 e% {9 g# ]
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% l+ W. ]- Z! {* j
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( j/ v" Z4 N; _4 Q2 @
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! p) H$ b2 j. H3 \
2 w, Y, ^5 N" Y' H$ L! n" d& n$ ~
/*等待UPP传输完毕*/
! ~7 I* E2 Z# k
//i=0;
3 o! Q. x0 f7 ^6 Z! S
//j=0;
7 v# q! v/ K; f3 B/ _
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 I! q3 G4 x8 d9 b1 ?7 w
{
, b' U0 n' }- e( @6 w) }4 m
/* 测试UPP传输的同时操作普通DDR数据
1 H% Q( p; _# U6 G
temp
=i;
3 ^: ]% z9 J1 s* q, |
i++;
& {1 u: P) A' j
if(i==1024)
/ u" \& `( f/ b4 O& l" K
{
- A! L3 g% u* r f! {9 P% c& @
i=0;
$ @3 j' k9 n6 j! X+ U9 Q
j++;
/ T5 D( n0 m. q k' t
}
# T4 @! Q& ?, B$ w$ a9 E# }3 F
*/
4 u% K9 S) {! N1 z
( I+ h" }5 F1 M9 m' v6 U
asm(" nop");
+ d* ~+ X& I1 F7 _% _/ g2 a
* S$ Y8 H# l( [: s+ O! f) z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# Y, g6 H" g8 \4 X! y7 Z
}
% n5 o2 H. J4 \+ N) L8 A0 F
1 G5 N7 z7 W8 L6 Z- P
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& M+ K+ @. [$ W1 `
//UARTprintf( "i=%d\n",i);
y8 M6 h! B0 h' L: d) M8 N
//UARTprintf( "j=%d\n",j);
* R% U# Q \ A, \' f' z
UARTPuts("Data mismatch in buffers.\n",-2);
* ]5 N$ ?- P* m; O& v+ f7 q
if (upp_interrupt_count == 2 && upp_error_count == 0)
) f( s" u) e& D8 I# D# H3 j) X
{
$ p/ j" D6 _' Q, G- Z
for (i = 0; i<upp_frame_size; i++)
. g# B) U! q4 I# J/ D6 N4 R& x3 S
{
8 m0 a8 [7 Z. [6 c& l2 M
if (upp_buffer_a
!= upp_buffer_b
)
6 m4 |; Y! T7 Q9 n" R6 o
{
/ J; U' l; t- {: B
upp_error_count++;
* A+ a+ ^0 |& y4 x! @4 y- M. u( x
}
: l1 W9 z; h, Z/ m1 w- W% Y
}
6 X. T N0 \, ]- M* h
}
9 Y* Y0 ^3 d) g3 ]
3 L. v, L3 f& y0 F* X+ P% |* I5 V) D7 V
/* 报告通信结果*/
& f( K- E0 @" `% _/ x% u
if(upp_error_count != 0)
/ @# i2 r/ x- C0 R- }& ^ o, ]7 O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
' y+ G9 V# y- t7 B4 C" @
else
: S* G6 f& D$ N; L4 j
UARTPuts("uPP transfers complete!\n",-2);
8 z! P0 l! ~/ X
- ^* _5 e% _& ]& k+ `$ {
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 o) Z0 p7 m4 A: ^
UARTGets(ch,2);
4 R4 t4 N5 w! R, L1 z& ~
UARTPuts("\n", -2);
* [7 G9 e0 n, D8 D) ^; q4 @
; `! e& |$ \4 p5 e0 I
if(ch[0] == 'y')
9 g: u% f$ F0 w# z/ Q L1 {
{
" G+ L! S4 T5 j: A+ M
/*打印全部读到的数据*/
/ ]- \$ g3 @& g# J1 y
for(i=0; i<upp_frame_size; )
( k. t1 h! G1 A+ ]! [
{
8 P( ?) ]% k" G; c! p% t9 `* H$ P. {
for(j=0; j<5; j++)
) u$ D4 @. o( H4 Q# H: O
{
; }! }0 `: Q* @9 |* A6 `
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& {: q& U8 D& L9 O
i++;
! U: L: d/ C6 f" ~) Z
//if(i >= 4096)
4 i$ `5 B# ], n+ M" X" X% S
// break;
& b: [4 K& ?6 w! j2 G( a& d: X
( P7 b3 N/ T* Z7 f3 O- x
}
% T0 t% f7 o9 r; n, ]4 t
UARTPuts("\n",-2);
" i5 Z) X5 a/ w# v/ H/ x
}
0 ~* C b# A6 O7 o! w% _
}
: k! _7 |$ a3 j: h
' z6 b n5 }, ^
}
6 n; S$ P P- [9 R# n! f
6 v& \+ d0 N# F) N6 ?, s1 Q- r
$ K# ~8 O7 j3 ?4 f8 N, M+ Z+ w
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% I! e4 ~3 W# x! S5 h0 K" k/ t, K& _. M
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# n6 C4 h6 E* Q% h0 k
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4