嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* y( a' i8 s" @1 j& e' n0 @! R
Void UPP_TASK(Void)
. G9 f/ r: D4 h6 P2 m0 J: U7 {2 Y
{
/ t( ]1 u C+ I! N! s" C! O
4 o7 p2 [ n8 }3 O4 Z
int i,j,k,target_int_count=2;
* `. S! h( l- \
char ch[2];
" t( q* C7 ~7 i" N. r2 l
" B/ c6 N! \! M" X) O9 i
* \ L9 W- j7 g& q
8 `5 u1 h2 k9 `) Q$ B0 T& r
upp_interrupt_count = 0;
8 S O# k' y% z( ^, U
upp_error_count = 0;
" M0 B6 ?4 d$ M" ~: e
: O$ s2 j2 z5 y# R w! c
UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 z6 W" t, O* k
// Initialize data buffers
" W- T# t% `( p0 ~
for (i = 0; i < upp_frame_size; i++)
. U# i6 E" |5 L( @$ ~
{
& {( |5 _% P: V+ @3 }
upp_buffer_b
=i;
# c+ m/ l3 p$ d- t5 p. H2 w0 S
upp_buffer_a
= 0xDEAD;
' }1 G, p: G8 ^
}
0 W7 L, b8 N0 i" J% q" y
$ s: g& F+ N2 W/ L; Z& G) {: }
//for(i=0;i<1024;i++)
0 _' v' ~7 I$ Z( m) c
// temp
=0;
( k* r, J' a* p
7 f" Q* Z0 G7 A& q8 L2 e& q
//UPPReset();
0 Y+ d2 e, z9 z/ ]# S4 l6 \
/*启动UPP DMA传输*/
- R* P3 {9 T, M X1 s
UARTPuts("upp_prog_dma_i\n",-2);
$ S1 K& _5 |& ]
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- |6 {7 J7 e- B" R4 A9 d% Z5 K
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
. X/ V2 b% e( g3 r( j+ N
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# }$ j* m+ u F: I8 F
; g8 v; M# ?6 d+ v
UARTPuts("upp_prog_dma_i\n",-2);
+ a/ D5 ]' j. f# A& k2 m) r
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: M' Z$ J! c6 P0 N% s! @ w ^2 P4 `
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ ~; Q% C0 l5 W$ H
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ |. T8 U$ ~/ [
, E: y: g% q. o9 P
/*等待UPP传输完毕*/
- y5 c7 w8 e/ R" a
//i=0;
5 z- P: M. A" j$ L+ L
//j=0;
8 ~0 J: ?% i- Q* l7 ?4 f
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# ^: V4 j- ~1 N
{
* e1 \( h# _ [$ W" m2 @
/* 测试UPP传输的同时操作普通DDR数据
: Z; z7 f% k" w6 H' _2 Z
temp
=i;
, @) a% P6 V% y
i++;
' N W5 r0 w, c; e. F; ~; @
if(i==1024)
^ ?) y! r/ ^$ I3 X: {
{
2 T+ J5 S" ]2 _6 z
i=0;
" K+ l1 k+ A% h S0 l
j++;
) L( O+ x7 N. q Q3 Q: Q
}
+ U. K& k8 d* p
*/
5 v6 T8 G3 X3 P( D8 c& R
; o9 c! _+ D: @" b4 w. l* ~5 l
asm(" nop");
6 y3 D+ P( Z. x( e# J
2 N; g& Q7 P" Q3 d. O
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 Z5 ^. P1 y( e, N+ L m
}
a- P' [# s+ ~9 E1 S% X& [: S
1 \- T% Z5 K6 [0 ^3 G9 v* H9 ]
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. D0 R, P& @6 J* s( B2 [& Q* r
//UARTprintf( "i=%d\n",i);
, T; r7 ^% ^/ X/ t; o, E
//UARTprintf( "j=%d\n",j);
5 Q7 M* C9 s; \
UARTPuts("Data mismatch in buffers.\n",-2);
; A/ L% J/ `' ^
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 W/ q9 F$ y3 `! K n
{
- z1 |" p! i# X0 Z1 ^
for (i = 0; i<upp_frame_size; i++)
! o) @0 \+ j4 X# `
{
* L1 G! I4 @ R( X
if (upp_buffer_a
!= upp_buffer_b
)
" V6 o' X) ?! d9 q3 W
{
0 N" J0 ^9 o' u/ @3 a
upp_error_count++;
% b$ f5 s- j2 l. i
}
. F7 J8 z7 ?" v) w; g) m+ i
}
7 U% p& w' T& e8 P5 }3 g) X, u9 _
}
( Z) r5 r0 k% `0 {6 f1 }( a+ _: l
( B4 X& m9 V: }
/* 报告通信结果*/
: Y o) l( Z3 u. j
if(upp_error_count != 0)
1 Y Z" P' _: l; s
UARTprintf( "upp_error_count=%d\n",upp_error_count);
$ s3 A) W3 Y0 M/ u
else
+ G1 {7 {$ Q) P+ S5 I
UARTPuts("uPP transfers complete!\n",-2);
) _5 A6 q5 J; G- W$ d. h
; U$ V; X6 M9 z0 _7 |
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* Z: g4 u' B% Z6 K' r* X: Z2 H
UARTGets(ch,2);
. N" A* c" A9 u* Y I ?/ X
UARTPuts("\n", -2);
/ t g, R9 d; m- r( W! P
9 n: C) Z0 `- ?! A0 i
if(ch[0] == 'y')
9 v4 k; z6 m1 \! L# L5 ]3 g( a
{
8 h' r) N" z j$ f6 S$ |
/*打印全部读到的数据*/
) `5 U% r9 {2 l# j) N2 s: C
for(i=0; i<upp_frame_size; )
& ?! n5 d# j2 |& d8 Z% W- M
{
+ y2 ]5 Q7 [" ?. D9 v# H, L6 C( C
for(j=0; j<5; j++)
0 P6 y' [6 i2 G4 i" {5 e1 Q' A; u1 H
{
5 v& q9 p' ?) P7 Q% N# \8 C# f: O) h
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
% ]' ~8 p/ x7 r8 ^7 `! p
i++;
6 e/ X# p/ s& T( s: D
//if(i >= 4096)
8 [) j# o' s% w; P+ G7 a
// break;
* Z' P: V* p) i4 F
0 X) b. e$ k0 v2 Z ]/ `
}
8 w3 w) a9 I) [) I- _
UARTPuts("\n",-2);
, v. g% ]/ f d% \0 M7 S
}
5 \5 g& L# F7 A2 @9 H+ t/ |( |2 E
}
4 N& m5 L- [0 j9 Z9 L1 c- ]8 d
) i7 a. u; m7 l
}
; E3 n- w* F }7 r5 b/ Z1 ^
: t( s) i% E7 g7 ~0 H; h, g
4 ^: e- v% R/ |+ D5 Z# t3 g
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 |* V! V$ j% V9 ~- O, T: _
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ E# ~( Q" u% p. f: l2 E/ P; S
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4