嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 d4 p5 M# j8 B, V& a f% n
Void UPP_TASK(Void)
7 l; Z! M7 V3 Z9 g
{
( K9 O- {- p$ r2 ^; h
1 {$ D; v! I/ V2 \5 G. \7 f# N/ o5 e
int i,j,k,target_int_count=2;
- s, O; j$ p Z
char ch[2];
5 D3 ]! s- n# M [
7 M M- H5 k3 A* L: U
9 N, y& W# D1 \* E( z5 F, u: W
7 ~. u7 k: t$ i. ~/ d6 y7 T& P
upp_interrupt_count = 0;
2 P5 P3 k6 I; j8 @
upp_error_count = 0;
, w. V: Y+ L- W$ n
( j! \$ q" M3 H4 ?" K! Q8 g
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 n; E( p# X. n4 ^( z" u
// Initialize data buffers
P/ Q& x. H; [9 I) e$ T7 d0 A
for (i = 0; i < upp_frame_size; i++)
4 Z' j* Y+ U/ m
{
+ S4 k b$ C' Y
upp_buffer_b
=i;
. E L( X! j. z% T. n9 N6 k
upp_buffer_a
= 0xDEAD;
3 x5 T- _. z9 s
}
( v' u5 ~6 y: ^1 y7 i
/ K$ ?9 Q i9 F/ \5 w( u# d' [6 Y
//for(i=0;i<1024;i++)
" b9 v+ |6 E1 r1 z' O: Y- F
// temp
=0;
2 ]4 @' B; F+ G/ e, w7 S
9 b* U7 h0 G1 _1 E
//UPPReset();
1 j, v* d# o3 a7 \7 U* Z
/*启动UPP DMA传输*/
% |- Z! ?# n# g- N
UARTPuts("upp_prog_dma_i\n",-2);
7 W) {3 `7 ]( G$ }! N2 v
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* N& g8 q! e7 y. A
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% @( d7 H/ {. ^* W) e. z- L4 E- x
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ q6 n# I2 m! K/ W
, J. Q1 D! G& a( H( |% ~0 ]% @
UARTPuts("upp_prog_dma_i\n",-2);
+ G6 K! y9 {; I
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 r: Z% H8 }- o8 L$ ?+ z8 w7 `$ g
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 {; t0 g1 u- m
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 x, \' r0 r& q. i: i! U
& F* ?/ ?2 O B$ y% j- S. X3 N& S
/*等待UPP传输完毕*/
) P: P6 e: X) Y" K
//i=0;
8 T5 m1 q3 X& y" s7 @# F
//j=0;
% X' x- v6 o8 Q
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- k0 Q! u3 H+ i* T1 D# m
{
* i6 n4 I9 `- G" w0 h0 ?- W
/* 测试UPP传输的同时操作普通DDR数据
& ]$ A1 ^# S3 ]$ q0 [* `! }
temp
=i;
; l; c* L1 D9 \6 c8 K
i++;
3 q, Y( Z5 W R+ G
if(i==1024)
" }' V0 X& w9 c: q$ E
{
" W( ~$ g$ L: ^8 V
i=0;
$ P* l4 U* G0 T# {/ x; W) V* u/ b
j++;
9 f% m8 T7 N' Y# |, t0 V5 l8 j; i' V
}
7 t7 w. d4 G$ N
*/
. l8 W# i6 P9 Z8 h! a* Y
& X9 V- I' W" v$ S$ L4 S0 K
asm(" nop");
, y! D" ^9 n$ o" d/ \
$ r) v% e9 l" a7 S Y' S
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
2 U+ Q" x4 k' ?6 A. c" [6 b
}
( f. S7 @8 @& Y4 W% a
$ P/ `* ~) J8 b5 I( ]* P( P$ m4 y
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" `' K# Y" i; L
//UARTprintf( "i=%d\n",i);
3 f+ }/ o4 b% b) N! U
//UARTprintf( "j=%d\n",j);
8 Y1 f' @; a8 p( a
UARTPuts("Data mismatch in buffers.\n",-2);
4 X, o6 D! P% n& l3 u7 a% o7 A
if (upp_interrupt_count == 2 && upp_error_count == 0)
; e6 I0 G! s z# `& Q1 Y4 @
{
7 d$ _2 l% O5 N- ]
for (i = 0; i<upp_frame_size; i++)
- Y" _& k2 B) L8 _! ]& C- V- n
{
% u8 |+ Y* k& F/ W% N
if (upp_buffer_a
!= upp_buffer_b
)
* L2 E+ s( B8 I! Q$ B3 T
{
# F4 h, w- y4 K" e+ H1 Y
upp_error_count++;
$ [6 C" e8 R$ T/ ^$ f( t
}
; u, d& _ m$ A& F" C w
}
' C9 O8 g( ?+ u9 F w
}
u9 H4 [9 y( a; G4 w8 x) B
+ I# x t, o2 T* N5 c
/* 报告通信结果*/
8 f9 z" B, I" v- l% K
if(upp_error_count != 0)
4 \0 K9 M T- f4 g: i g- ^9 d
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* a* J5 X( Q8 c* |0 s
else
" m' N1 ?2 i5 { w+ M% _1 ]/ Q/ _
UARTPuts("uPP transfers complete!\n",-2);
( d9 ?+ c& j! i$ @2 G: d7 q9 d
( a j1 A/ o# t* c
UARTPuts("Do you want to print all the data?(y/n) ",-2);
9 ^$ G7 {0 V3 P, d* a. L
UARTGets(ch,2);
0 B J/ |* p' y s! |% z8 r6 j
UARTPuts("\n", -2);
) v2 S2 l7 B2 V* }; J' ]7 z9 K- I/ m
i! {4 d6 E* }- Y8 y2 t* a! @0 \
if(ch[0] == 'y')
+ v- y$ `% K9 Z9 \& B: J6 t
{
0 D* l% \9 y+ T
/*打印全部读到的数据*/
+ _ M* W6 V7 i
for(i=0; i<upp_frame_size; )
( d- i; m n# S. O& M4 {
{
2 e3 u: m; [0 s; d: V% r( A
for(j=0; j<5; j++)
6 @% | s: k' i3 }3 K4 I+ l9 f
{
1 i* V7 Z* K6 D$ F7 n
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 H, f7 h5 r# T% N* \, X
i++;
! R5 m' n' c a
//if(i >= 4096)
6 ^' _' a& w: n" I7 E' K0 e
// break;
3 z0 j. z- z& D: C' m( h
2 n" U, L3 k& t2 Z1 f
}
4 @5 g" [+ {7 f
UARTPuts("\n",-2);
6 u* d+ C: o, u( N/ B* M6 t! [
}
3 _1 P; D& X8 {3 D( n
}
& J# `) W! f, H6 v$ C) ~- Y
/ `1 P% i& |$ g& A# @. |, g1 ~
}
1 v$ c3 [. q2 [4 }4 Z* A
8 l( ]# Y% _: |4 l# f
$ }) {. c& b- B0 t1 R2 v. ^
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; S& \7 u2 l) j/ P$ A1 o' P l
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; l7 b* \! j8 ~( A
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4