嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# B0 {# P. D! s8 V) m
Void UPP_TASK(Void)
! i6 B1 H2 H" s- @* T
{
' I: R+ { v. }) O
& \1 K9 j! B1 l0 R9 u: d
int i,j,k,target_int_count=2;
- A# S# U0 f, B4 H) L9 J5 T
char ch[2];
& |8 a" a; \( z, C
' Q u3 x' a6 @3 H( D
9 e% | {4 A" o( Y$ f# X$ U
. c9 _/ i# `3 @ x$ G
upp_interrupt_count = 0;
) ?0 y6 F, F3 L- L
upp_error_count = 0;
8 c4 P' k& h8 K9 k! k! x6 f
8 k ]1 E" g% }7 J- C
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: L# t& U7 W6 Y' T7 a
// Initialize data buffers
6 C) z$ E3 @: P. w3 b% \
for (i = 0; i < upp_frame_size; i++)
% e+ k& f1 }8 e) @8 q
{
+ R8 s, x7 ]$ _! D
upp_buffer_b
=i;
1 B' s( x3 i2 @0 f) L
upp_buffer_a
= 0xDEAD;
! V1 \2 z# A$ a0 J6 o4 x& L
}
, M) [2 u B/ ~3 m/ s0 B
0 F6 t* Q9 o. Q Z) w
//for(i=0;i<1024;i++)
" N) z9 X! W5 @/ v
// temp
=0;
; F+ d+ a6 q6 Q X% v) e
- X* i* X2 i; M1 X+ G
//UPPReset();
; ~8 G5 c1 b9 w/ Z4 k, ?! O
/*启动UPP DMA传输*/
3 q7 X& z D# w0 i) m" ~
UARTPuts("upp_prog_dma_i\n",-2);
4 N+ J" a4 A* i/ M4 [ Y, Z
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
) O8 _) k: o' k7 W) c) [9 j( B
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ M" i1 Y5 [& U6 k* d
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 l' |4 V, R- R* \1 k; M" n% R
7 |' O, e9 L: v) g7 A; I
UARTPuts("upp_prog_dma_i\n",-2);
0 n9 C1 o" ~3 E( P
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
( c! [6 _! Z; v9 @2 ^
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 r9 X! Z2 u. K2 P; y
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! h+ l" q& `2 J
E9 w# s, h4 }3 u
/*等待UPP传输完毕*/
% L( U" k8 N8 |
//i=0;
5 T, N$ z1 o; y6 C& X/ D/ t
//j=0;
4 R! ^. U" L9 N
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
m8 C, J# J" X& c; g+ Y
{
+ Z$ E9 ^) y! U' p
/* 测试UPP传输的同时操作普通DDR数据
% U9 h2 c( l5 e% D: s- m. P
temp
=i;
+ {' p, o; f" f' h1 t
i++;
% v6 g3 ^$ q4 T/ D& I+ n7 C
if(i==1024)
" s E4 F" t/ t2 g& Y
{
y1 \8 i8 i' z% ^0 @2 T
i=0;
# t8 j) r. w% a- w ?
j++;
& V0 |4 B, s. @! w/ @5 k
}
E) X& h5 i/ k6 ]1 ^' u
*/
0 I* L, w- _3 R" K5 V7 o7 Y0 z
. u$ Y9 y# H0 Y' N$ d* Z
asm(" nop");
- `1 _% H$ D6 c- P; k
9 u: s. T# O! d& V( n6 E& P/ I
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, b3 O+ e4 s3 F+ l: Z; S$ h: {
}
; m F C- S. Y7 i$ e
! x% O( q* _7 u% ]( V
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 ^9 N' U5 G! }
//UARTprintf( "i=%d\n",i);
* W1 i: a# f* \' y* C. x
//UARTprintf( "j=%d\n",j);
% @- k* i6 y& [' @
UARTPuts("Data mismatch in buffers.\n",-2);
2 ~7 s3 o: J1 k
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 b- _8 C/ t' c p8 a1 Q9 F2 J1 L X
{
8 b- ~" a2 T( F
for (i = 0; i<upp_frame_size; i++)
4 E9 t" P7 O: H" ^. X( w$ l* m0 ?) y
{
# a1 ]8 ]0 G. [
if (upp_buffer_a
!= upp_buffer_b
)
1 M$ X- h+ V1 F l8 I7 ]& E
{
1 }2 L+ G1 \2 N
upp_error_count++;
- G7 G5 i/ D6 @1 W9 {% N
}
6 R; b0 B* v# u4 U# M4 i- B" z3 D
}
8 ?1 B; E k6 Y- x
}
. R" A) }% a! M& c; M" E
7 L3 d3 Q7 k6 f2 q* A) C+ Z
/* 报告通信结果*/
8 ?2 n: s1 l7 K1 ]$ W1 E! R
if(upp_error_count != 0)
+ b0 m" p' t- b* C4 E( B
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- l2 |+ J+ Z/ ?% @% L$ ^& `* m/ ^' m @
else
4 H2 H N) v( R ?: _5 z s
UARTPuts("uPP transfers complete!\n",-2);
1 w# h# t( Y1 ?6 K) P, d( {' `- ?
+ ?* p' b' ]5 Z) P
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' ?4 j" ~. W0 b* W) f+ l
UARTGets(ch,2);
$ i3 ?7 V# S, r6 T6 T! T
UARTPuts("\n", -2);
1 q |- |" d# ? J/ U& F! w$ w
2 u% w% i4 v0 h# y. o/ v a# @
if(ch[0] == 'y')
2 v2 }6 x# `. h2 f
{
# K* D, [ {; w! ^
/*打印全部读到的数据*/
" c0 J6 h4 u) N8 v
for(i=0; i<upp_frame_size; )
, B# k! B$ [/ R+ p. O9 j3 r9 w
{
' z& q/ z W0 t5 w: T9 M
for(j=0; j<5; j++)
# W4 K0 a1 K1 D3 s6 T$ C1 E6 a
{
/ y0 Y3 X- z7 B5 l3 D, d
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
n! R6 [( j- [" H" n' D
i++;
0 [1 M7 r$ [; o1 m; C
//if(i >= 4096)
8 d$ a; T3 R, c( ?" |
// break;
5 k& I5 ^" N: b- J
$ z0 }' {$ H5 J/ f4 r. h
}
3 V( { U! |" B5 w
UARTPuts("\n",-2);
& m* |, X( N+ [/ u; J6 s) f) U% o
}
2 p4 d8 N& ^) q" h
}
+ o1 V3 {$ r! X: Z8 m) |4 B
S( s1 T4 r4 y: b- \
}
( O( l( a5 w/ }) @; j
, u9 M3 m' f C) Q# M
- V1 k$ S* O+ q8 B5 O
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* t" J; N! E g1 {
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
4 D6 F4 ]" Q/ O0 L
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4