嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ r2 }% S7 S, i! Y2 @
Void UPP_TASK(Void)
; f- t/ E' K% P6 B
{
! i( \2 \8 B" G& g5 S
) B' t% z1 ] {4 z
int i,j,k,target_int_count=2;
' T# R5 G7 }5 v$ a! {9 J
char ch[2];
+ H1 T% |. J' v a5 M5 }0 c4 b
8 m' ~+ a! u- u$ i0 Z! [
" D v: Z3 y" Y% _
7 v0 D. s+ f2 J" G
upp_interrupt_count = 0;
Z) Y* F. Y; n$ T& u2 D! A- T
upp_error_count = 0;
4 k) e) f" o1 K& c
1 e6 D: ~" s% K. h6 @8 l# P, z8 R
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 d/ {0 ?+ H5 e% m' @7 Q
// Initialize data buffers
7 F7 c1 P0 J! D; d
for (i = 0; i < upp_frame_size; i++)
& V: M4 U/ n. F% ^& s
{
8 O" z! x1 q$ c& u* d* X4 I4 {, P
upp_buffer_b
=i;
2 [8 m: U; Z2 V3 X, r% T `' \+ D! t
upp_buffer_a
= 0xDEAD;
4 |5 T* c$ V/ D2 l: k( n8 p
}
: n' N) j1 B) M5 N3 [
. V6 h/ G7 a2 Z, R$ q% z
//for(i=0;i<1024;i++)
n% v( M1 Z- ]' T& d! ?
// temp
=0;
( ]! _. A# y6 x" B5 e8 I7 ]0 `
" ?' q* Y$ X9 O6 R3 o
//UPPReset();
) L* w8 A L' q( [9 L
/*启动UPP DMA传输*/
- a1 ^" v- l6 {
UARTPuts("upp_prog_dma_i\n",-2);
) ?" v$ G, o: p( M6 i
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
{+ i7 C) x* } s2 M
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 j7 p9 B6 M' I" G4 I9 w& u4 T
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, Z5 @$ ~) t3 H( z5 e4 m7 x
3 A2 L9 P9 S7 n# b: `" s. W7 S- `% h
UARTPuts("upp_prog_dma_i\n",-2);
; ?. @; A' u4 h. k4 r1 g% f
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: k# `$ d+ L/ x6 T/ p0 p& Y
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; v5 g0 N# X4 n9 z$ O
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 C1 Z8 q0 Q+ ]4 z
1 \* i$ @' e! f! r; r* V$ s/ ]
/*等待UPP传输完毕*/
4 X% u5 d* Y9 I
//i=0;
+ P1 a# E( ]: }
//j=0;
5 Z' }9 |2 s P- k
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) p3 Q6 z+ \5 g3 G
{
' T8 T! d$ P6 k- t2 h' K& F
/* 测试UPP传输的同时操作普通DDR数据
4 Q% `1 Z- g9 n1 _$ Y! z
temp
=i;
1 a6 F+ W) C: I6 D; ^( J" \
i++;
" [! w: }! s, Y8 M6 P+ k
if(i==1024)
0 l" s! v3 A1 Q* k6 z0 q+ n
{
( ?$ r" t& x' a0 ^# A- P8 Y
i=0;
+ l# {) J9 @% r
j++;
6 e6 q% j( M. Q
}
8 h/ }% ~! n* B
*/
: E- e1 X/ |8 K+ _
" K& i7 r( S2 a, R5 ?+ c; g: k
asm(" nop");
7 P) u" X0 f% ]' w: v3 B. @
+ {5 o* x2 H+ y: H+ T* s" s
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! C& S' d% r* `5 o. N% P0 {& ?8 A
}
6 O. d# N$ x5 Y* @& F
# _. v; u# U4 s2 V8 A
/*检查UPP传输的数据是否正确 (loopback modes only)*/
- G3 \! G5 ]: P1 W9 N
//UARTprintf( "i=%d\n",i);
- A" U. F5 D4 y! p' E: [9 S
//UARTprintf( "j=%d\n",j);
; W2 a8 F" {# x, A5 n' U% e0 D
UARTPuts("Data mismatch in buffers.\n",-2);
/ s, D3 ?! p# z7 J' {# R
if (upp_interrupt_count == 2 && upp_error_count == 0)
: P0 P( ?& H) j, a0 U
{
- T/ _) i+ I# d7 k+ F
for (i = 0; i<upp_frame_size; i++)
) F9 G* x, `/ A
{
, F( U4 D! O0 R* ^0 M2 Y
if (upp_buffer_a
!= upp_buffer_b
)
! v; K" b3 ?; ], S8 |* [( e
{
/ x) p1 }$ c! ? b$ K
upp_error_count++;
4 \, D6 Y$ h3 R: t3 o; x
}
: U" P! W8 y. k6 x! q! ^9 |
}
, o; i5 ~5 ]; j% N$ A
}
7 f2 V8 G* K' i" N9 y' m1 {
; E0 }1 w9 Z3 k
/* 报告通信结果*/
7 }0 I5 o& N# z" z. w. F( d5 q) X
if(upp_error_count != 0)
8 ]0 v! @. Q7 @6 w+ \! S8 R, r
UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 T6 o# P9 S# }% g3 Z
else
3 \ j; e! y, g* J
UARTPuts("uPP transfers complete!\n",-2);
5 S3 z; J: } p6 u
" O0 V" X: p9 k! O* q5 F' c7 Y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
# g/ j; {) ^* J; j$ d
UARTGets(ch,2);
3 Y+ A2 [# M1 j
UARTPuts("\n", -2);
& N! W7 z J0 Z& Y; ~
7 G% c. O% V( }& a" I' M; ^
if(ch[0] == 'y')
' M8 }7 z, D; s( ^9 y1 B2 W, s
{
) S2 ]/ |! D& ?5 m8 i
/*打印全部读到的数据*/
! x- U" A7 U& U# X# V
for(i=0; i<upp_frame_size; )
) u4 M2 a r/ i; a) ~: f5 x; S! g
{
# [5 K; m5 G5 j$ M
for(j=0; j<5; j++)
) I( n2 T% {1 j3 [: O& ?
{
O7 j) g& R7 W( R" K) ~
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- o7 Q1 d& f9 A4 I3 D
i++;
7 s- A" t, B) j, T) U' O" |' \0 r) a
//if(i >= 4096)
/ ~8 H, B. c( J" ?* K8 }+ j6 l D
// break;
* m2 Y8 Y8 A$ M0 t3 f
: z4 I! d& C1 ]6 [
}
, _. a9 b, i9 Y" R( N) `
UARTPuts("\n",-2);
* V" x, ?! L. s0 q1 e; T/ p
}
6 {5 C! A# f, ^& F' K/ n# S9 n" w
}
) Y) }) l% T0 v* |3 _/ I7 E j
6 n! s# Y5 }% S
}
) A, M. V7 V: J* B* K* Z# f1 K! o& I
! }* U) E) u0 @0 \
% F; d, D# Y# e) ?( v
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 A- Q/ u3 q1 I
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: @6 M* W% `7 q7 F+ p9 S
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4