嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 f: b p' y$ s* ?, A
Void UPP_TASK(Void)
* h3 p# J4 c2 H- j+ B8 n- |
{
3 E4 ?8 k+ n) M
7 G) o. i# k7 H' N$ j2 G1 \
int i,j,k,target_int_count=2;
" O1 h" }) O1 ^- e) X5 o: K
char ch[2];
! y+ ? l% ]2 [4 l+ I1 z0 [% ^
' t3 m' ^& T; C* R. h
/ q# J8 q# V( a0 T. K8 u4 a
) K9 ?6 W0 @1 K: B% Q' d' T) U' \0 i4 k2 b
upp_interrupt_count = 0;
/ k7 J3 J% {, |, a4 w* L# A
upp_error_count = 0;
2 n/ H. X6 u& ]$ w# T
2 Y" ?" C4 {7 q* r9 {3 i% T: y
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& U: K. H' l/ B* ~
// Initialize data buffers
) a1 c' Z$ e- a. a, K" T; Y
for (i = 0; i < upp_frame_size; i++)
6 Y- B X# q5 p' t: |2 K
{
% f2 {' p" J1 ^) n) B; h
upp_buffer_b
=i;
# e+ X8 @$ `( e
upp_buffer_a
= 0xDEAD;
# _4 h' O3 O) R+ Y" h
}
& C; H) z* ]$ I, n3 H
$ @+ o0 E* f# r' ^8 z
//for(i=0;i<1024;i++)
! i- D+ d7 p# P9 E7 R/ s
// temp
=0;
2 A$ c3 n8 n N) P2 }& ]. i
* G; Z4 T- i8 P9 t0 L& \( }, L
//UPPReset();
% f8 B0 z2 s H' a4 H
/*启动UPP DMA传输*/
& c+ n' k' m8 h! n9 \8 X* p
UARTPuts("upp_prog_dma_i\n",-2);
3 a/ R. u' n8 l. {) M
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ A% m& N2 T% j2 E/ W
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, g0 A H( f9 Q! m; S- _
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% g) u+ u- \7 P; r v" }+ K; ?+ H/ T' U
8 {1 M% d; P' A: x9 R
UARTPuts("upp_prog_dma_i\n",-2);
8 C9 C: d# B. |7 c, l
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 g9 |. Z4 E# _
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! Z' g- l; ^. V
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 b. R {2 |3 R1 U9 j* k
6 |/ l1 m& ~. z+ ~& P4 @; P
/*等待UPP传输完毕*/
3 P3 U- Y+ W" H$ e- `6 J! T* K0 Y
//i=0;
) N4 a3 Y. K" i( N9 n$ Q. t6 _! E5 u
//j=0;
& _- K, l/ E( ~7 s
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ c7 y7 U( O" A' f
{
* ?1 N5 |, H* i) ]
/* 测试UPP传输的同时操作普通DDR数据
$ _+ E2 [" K6 H; V7 F; e
temp
=i;
) n+ m: U \$ o5 Q' L
i++;
" o0 q" z! |' u% u# `
if(i==1024)
( k3 C- o+ x; w6 y9 r" V
{
/ B6 G0 g1 i' S9 M7 b! W. A2 o
i=0;
6 a- H: M' \7 u4 Q/ V
j++;
( H* a+ s) J" K; r0 J
}
z: r* T4 o4 X) t* @
*/
. g l* y2 [$ o1 `2 o% F8 J+ |9 a0 U0 W4 [
3 S2 ~; N4 u) _# D" N X3 Q5 ?
asm(" nop");
0 I# _' U2 c; F$ Y/ L9 z
2 @( R, V- t4 c9 `1 H8 L
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
|! N$ m4 k. F! F. c
}
+ Q C, B7 N9 F' K* j) W& J1 @
4 b. v) ?8 i# b7 a8 P/ i6 G
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; z2 b+ n3 b! T$ `
//UARTprintf( "i=%d\n",i);
* T/ {5 e# F1 I( ~. D
//UARTprintf( "j=%d\n",j);
- A" J# z, L0 m9 |3 g1 c P
UARTPuts("Data mismatch in buffers.\n",-2);
3 I3 ^3 _8 W5 D' e5 e& m) [. {! m
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ {9 E( n f, S3 ]- N+ n8 w9 K
{
- }8 Q; l6 D7 ~& b0 E. T% p
for (i = 0; i<upp_frame_size; i++)
3 ]' f. P( t/ q+ n% n
{
: B- z+ A; `2 P1 e
if (upp_buffer_a
!= upp_buffer_b
)
9 k2 n9 K2 {0 z9 B/ S+ f0 \- g
{
3 F7 Y8 `/ v! z3 N2 y
upp_error_count++;
1 E& U7 s0 U# B9 Z& j) l
}
0 f2 L( `, J9 c! S9 v% p' W
}
* z$ V8 I! y l
}
' B9 F9 X/ n" V
2 e2 W8 E9 K9 O- ^+ g8 ~6 V2 o
/* 报告通信结果*/
: b A* B9 K8 i. m9 U' u( n
if(upp_error_count != 0)
% x( F/ E$ D% m$ @
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 J/ V( W* N4 ?4 w
else
9 y9 e' V& ~7 N
UARTPuts("uPP transfers complete!\n",-2);
9 V: [% q/ `: G* K* }/ W- h
o; r4 O. I( z' P# R
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) O6 o- }! j, G
UARTGets(ch,2);
1 j/ {* ?$ n( D$ `. v
UARTPuts("\n", -2);
' Z+ d! A# Y7 [3 U
) |1 n G" P& u" v; \
if(ch[0] == 'y')
4 m1 `2 ]2 ]2 n3 S9 w4 a
{
0 d3 I0 ], w: \) [' R* H
/*打印全部读到的数据*/
2 W; e5 v1 X* o+ Q8 k1 @: S
for(i=0; i<upp_frame_size; )
+ ?- }# t2 k/ u* Y1 Y
{
4 ^ Q% t% Z: B% X% P. r
for(j=0; j<5; j++)
, M( _$ e$ o7 X1 \8 L
{
/ ]! S$ Q3 `7 s" B- ?* n9 f
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 p6 w g) ~; t
i++;
* ~6 H& f. q1 p% T* {$ {
//if(i >= 4096)
8 k! g# B7 l5 A6 o1 d# N
// break;
& ~$ M4 j7 f' E- Q
0 H) { M$ _4 [0 j/ m- l
}
7 a+ e! Y, h- h# B" i
UARTPuts("\n",-2);
" }: S6 E, b0 ^
}
7 U( }* t* g, o; l+ e
}
: [# k. E0 Q1 |4 C2 K2 x
! R& \$ y3 \5 P
}
: m, g$ ~' s8 w2 C3 `
- e. Y: \' l( m) H; }1 n6 w9 `
+ s/ J8 y9 O6 r# {" _, L
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 ? D& X( l' s) p' s8 s
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# A) Q; }" \3 @8 J2 T' R* {8 e7 Q
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4