嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" k# o( k5 Y0 _, Q5 ^
Void UPP_TASK(Void)
# y: |0 y4 _6 A/ X2 H
{
! X: Q+ x7 s2 ~. J1 ]
4 R" J$ B. j6 F0 F; r7 m
int i,j,k,target_int_count=2;
+ e. y. o% ~& N [. d
char ch[2];
' a# ~" A y1 N l7 Z/ o7 ~
. T( e! q0 C& x4 O6 o% o3 @
5 w0 q# j9 f/ K
! D+ t+ r# w0 g3 g- f
upp_interrupt_count = 0;
Y X7 r9 v6 u2 C- o; W! C
upp_error_count = 0;
4 _9 i! S0 v# _. `4 t
- F: A+ y- [+ h! ?! [
UARTPuts("\tResetting uPP buffers...\r\n",-2);
6 [8 p* S, a! ?2 M: `( a/ b: C
// Initialize data buffers
3 [% t$ @. L K! y6 P3 O) V
for (i = 0; i < upp_frame_size; i++)
/ ` E( x& Q: f% ?
{
& a1 T9 @: f; o6 V
upp_buffer_b
=i;
1 k f/ }! |1 q/ z
upp_buffer_a
= 0xDEAD;
+ a# G' q9 _. }2 o) a: k, ]
}
0 L; A. q' O3 e$ W; _/ J0 d; A; v
' A1 R0 ]8 p4 p: {) O% ?
//for(i=0;i<1024;i++)
2 r3 g# G- i, i4 B! G+ Q( R
// temp
=0;
( H$ y+ T2 M( I; q3 G$ R
+ |. i, m' L, j. F+ u" m( r
//UPPReset();
3 _6 i. d& Q5 f
/*启动UPP DMA传输*/
. H" e& \7 z `/ P5 k% u
UARTPuts("upp_prog_dma_i\n",-2);
+ {+ y: a3 S* p$ I3 j
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; M; q% z; y# Z& Z, C: Y5 K$ L6 f
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& G- G# I. b1 o$ }' F8 |
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- t% w7 @/ B9 O2 Z
- d% z( t) B% ]! x( k
UARTPuts("upp_prog_dma_i\n",-2);
' v* Q9 e: |8 w. }
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ l4 |" b- {7 T0 |' n
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 O% |; O |; b5 h7 P% o) ]# Y
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ R8 e( Z2 e9 c
, N: x) n7 } j) P$ r" Z, D
/*等待UPP传输完毕*/
' ^2 l6 b, v1 Q! u: N' W2 u
//i=0;
G3 r p$ _4 }8 C* R D
//j=0;
$ z* b9 _& S" }$ I: a3 L/ I
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# Y' {% U9 e5 \: V4 X
{
2 u' c! [, C5 }* ~0 I
/* 测试UPP传输的同时操作普通DDR数据
9 }+ o* s- \- n
temp
=i;
: q% d7 A- I) ^9 e. N# U
i++;
' z+ Y3 g1 L% u( ^( Q
if(i==1024)
+ n3 _! R2 Z# L8 j. U
{
6 _; x v( w+ W: x
i=0;
# n* t, O: u' @& ^: u
j++;
, P. C2 b. [1 T
}
5 G+ \' b1 t+ V' C' R6 p
*/
1 V3 a: }6 W& v. s
" a, [( G* G# }' l N% R
asm(" nop");
- ]: g; y) Z0 h4 T0 y
7 |0 F3 u- z9 B0 }
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ ~5 l A# C. k" [. @8 l/ d! b1 N
}
( D3 {+ h0 C# c+ Z' j7 H
- I0 P# }* n, z0 J5 |' `
/*检查UPP传输的数据是否正确 (loopback modes only)*/
4 y# R- s) `3 ~$ P% X% u7 {
//UARTprintf( "i=%d\n",i);
z- K) ?7 j1 T J
//UARTprintf( "j=%d\n",j);
9 y8 Y+ X# A( \: X. b% h r
UARTPuts("Data mismatch in buffers.\n",-2);
2 F2 ]& t1 S# W a
if (upp_interrupt_count == 2 && upp_error_count == 0)
F7 ]& ^2 r+ G Q
{
8 ^# p; [# m G) Z" O9 K9 p, r
for (i = 0; i<upp_frame_size; i++)
I# W9 Q5 @) s% O. w- q
{
' y6 l& s, [3 B3 b- V
if (upp_buffer_a
!= upp_buffer_b
)
3 @1 M1 l$ a' r( w {% \3 V
{
$ u B- s) `, z1 O
upp_error_count++;
; I' z( _6 H; z) t+ a3 {% j2 @
}
# o# l/ C" I9 Y
}
. X r% u9 S, Z# X
}
. C% P9 u. x M3 U# I5 q5 [
- M0 _6 U8 m4 s7 ~7 j" k7 s$ ?
/* 报告通信结果*/
* f3 W# `" ~4 J* x7 J
if(upp_error_count != 0)
- J6 G8 A$ u! a- a. ~ C
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 G8 o% C$ ]# d4 ~9 E: a5 c
else
- ^6 V. d( [2 o7 A8 D
UARTPuts("uPP transfers complete!\n",-2);
5 P! M7 m+ N' u
' F' g1 q1 A0 `8 k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 m7 x! Y, a Z& v) c5 k5 c
UARTGets(ch,2);
6 r5 O* {! \/ q9 C1 F& o) h
UARTPuts("\n", -2);
" o# g! I1 R$ {+ k
}/ b. ]& D5 F) P
if(ch[0] == 'y')
4 `$ }; }. s z' j% A8 Y
{
9 D, l- D2 S$ k- ?/ @4 X+ \+ \% q
/*打印全部读到的数据*/
) N7 K) o: T4 S7 X' n2 C% s/ O4 W0 \
for(i=0; i<upp_frame_size; )
) J/ Z: j/ |3 U
{
1 b: y: g1 m5 q6 J) h# ~
for(j=0; j<5; j++)
0 D2 E/ Q$ z C2 L
{
% w5 Z! G5 q* @% Y
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
4 X: `1 S# _+ h& g9 [, i
i++;
5 p) v" L) o. b
//if(i >= 4096)
3 d0 N5 S) w4 \3 R0 {" v Z N
// break;
& Q! a. i( p5 A% n3 Y/ [
2 l0 [% ~, I/ }' [8 X7 x$ v' K
}
; ]+ r( O4 g& B% ?+ x
UARTPuts("\n",-2);
3 N- E4 K+ G* ^+ h- M9 N6 i, T
}
2 E& v: i# U& p ^9 k5 I [+ }1 L
}
0 P( N# F. ~, k+ S
7 X$ ~2 |. o+ Y9 v* e; i
}
3 q: U3 M2 o5 [ }
! Z* Z- }- R% B
# ]* o7 U& D( d* D6 K
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% V3 t3 l$ [ a3 w( g: c
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
9 [5 V! ~3 T* S9 Z
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4