嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 m( D; G7 ^$ x( q" q8 F
Void UPP_TASK(Void)
! H! b$ [4 m( `- \6 \9 c
{
) v, j7 H. r: A% O* L* I& n
' z$ o. b. c) q4 v+ t+ U
int i,j,k,target_int_count=2;
( J3 P% Z/ f; n3 e' U% ?
char ch[2];
) d. `, L" L& j8 k: Y, _8 Q8 r$ V
3 b2 P7 d9 l: M* L" q# O
* W. d) b$ u! B; I p+ ?
|/ F3 C/ R; C- ]0 @# w
upp_interrupt_count = 0;
0 C0 n4 O. ~ H+ A1 Q
upp_error_count = 0;
' [; `$ d8 k; r: b% U" z
5 r* r3 k K' Y
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 s; v8 a' V* z4 C9 k0 `
// Initialize data buffers
7 u( a: E2 l9 [
for (i = 0; i < upp_frame_size; i++)
+ l# c( K( i+ h9 }3 h& W" A
{
/ U( h' Y) ^- g* z" W. x1 k9 `8 J
upp_buffer_b
=i;
( g, e7 s8 W) J. H
upp_buffer_a
= 0xDEAD;
$ p4 k: g# z6 |+ b6 C) b% _4 K
}
2 u4 X+ ~4 S+ S$ U6 }. f2 L& X
( m+ ^$ o( ^- E+ @& B0 y# n
//for(i=0;i<1024;i++)
. C2 m9 B3 b6 T o: e3 _7 k
// temp
=0;
% d, N+ g& @% S
% f* s/ T# C& ^; V; Q
//UPPReset();
, p W7 }- N6 {& k
/*启动UPP DMA传输*/
- _5 b7 Q. \' a2 y
UARTPuts("upp_prog_dma_i\n",-2);
- Z0 ]7 C. ~ a6 C# ^9 D
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( d1 o6 G& L& o3 u; U# Q7 F
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 W! G7 z2 W: u) o
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
3 \; k( D' H+ E/ l2 `
6 i+ q/ I" j6 h/ ?
UARTPuts("upp_prog_dma_i\n",-2);
' y* S! v8 f4 x+ H- Z& }
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
# A/ u" O5 b0 p q/ c E
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 H- Y6 j& L) {, v( |* p1 x8 Y7 u8 u
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# j+ U) ?3 @7 F0 z' s
- ]1 M0 V2 B Z, x& D/ e
/*等待UPP传输完毕*/
0 T/ l7 y }* H4 y- I
//i=0;
2 `$ }' B, n) p# J" H' n2 }
//j=0;
) S+ j6 K: P5 m& ` u
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
/ b" |" S( a! K4 ]
{
1 q( z2 B) b) m* T# o/ ?7 {
/* 测试UPP传输的同时操作普通DDR数据
# L* E/ ]; j- |: z. w0 k3 t
temp
=i;
) ?) o" S8 t* G+ x/ D; l6 @' B7 X
i++;
/ Q1 G \, ~7 n. h2 a: f
if(i==1024)
$ p8 Q, o+ c) z* i0 d, w9 `
{
. E7 B) q8 `. w4 C- Z2 O
i=0;
$ ^" u$ [& i5 e- R, K: Z" y2 R
j++;
+ J2 I8 X0 P6 k8 m; \) O
}
) H( k9 V* b7 P6 U! p2 i
*/
% @: N* G: D) g* L
2 m% r% e% \+ w6 A2 O
asm(" nop");
. _; t5 v# x6 O3 C5 Q1 j, F6 h
3 }9 \& y2 n* @) l$ Y# {: I0 |
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' v; x; m t2 ~* j
}
( {/ u8 m, I( W5 S) F: e& K
, X% C2 A( J9 n6 b; \4 i
/*检查UPP传输的数据是否正确 (loopback modes only)*/
" a- P! w0 q9 [. S X8 ]* k/ N
//UARTprintf( "i=%d\n",i);
) o7 ?8 C8 i; h, ]8 M ?
//UARTprintf( "j=%d\n",j);
' q5 B+ U/ z% e3 B$ C
UARTPuts("Data mismatch in buffers.\n",-2);
9 Q; x& Z$ X% ?: k# r" ^1 L
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 y& t" M( @1 w5 |4 w
{
* a/ Q7 n3 a% [ [! L% w# o: y
for (i = 0; i<upp_frame_size; i++)
& a4 v# M5 e. q/ o
{
- T8 x. {8 V) Z, }6 [1 |; M
if (upp_buffer_a
!= upp_buffer_b
)
% P1 O& c9 U0 {" U5 D
{
' ]1 o0 N3 h: ?+ g# P
upp_error_count++;
' i% `, ?7 s2 r2 W% v
}
6 A! x6 i. f: ^/ w) U
}
# N( Y+ d# U1 b* ]& F9 f
}
% `+ T4 `$ `" V; u' ^: F0 y
W h7 A- U3 x; P* w
/* 报告通信结果*/
1 A: [& c$ T# |) D. ~( `9 s$ l
if(upp_error_count != 0)
$ D8 ` b N9 Y8 {$ W) K
UARTprintf( "upp_error_count=%d\n",upp_error_count);
" d6 t5 `+ n/ h' }
else
* d: K# A3 b: b/ X* S
UARTPuts("uPP transfers complete!\n",-2);
+ M! v; s' e- [. H. G
F: v6 Y5 t: D! j% r7 v: N
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& {8 w4 F) V( N
UARTGets(ch,2);
0 o0 L; U0 I+ ^6 d$ M$ ^
UARTPuts("\n", -2);
O) H0 Z, f2 ?$ E
) d- E( y, o$ w0 c0 P2 x, ^
if(ch[0] == 'y')
" ?" h; q0 r/ ]& V$ {8 b+ R
{
% N, _- a- L/ H3 _4 B* q
/*打印全部读到的数据*/
! i N+ k& ~, j8 ]6 o5 b
for(i=0; i<upp_frame_size; )
2 K) S5 v# T$ a
{
P1 n1 w" H# M3 {# [. o+ H
for(j=0; j<5; j++)
% T. P9 l2 A, _& a$ r, Z
{
1 m$ q0 ^; c, @+ k/ P/ |
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( `1 r0 c+ G+ j; |) I( z- P* u
i++;
" V" {+ _9 ?0 ^ E8 `
//if(i >= 4096)
( m" K: l: D7 Q0 ]
// break;
8 {0 Y: D, [& B, r4 d: j: g
1 v, i7 z$ ?5 L5 |5 u0 w2 ~
}
: E2 J; N. W5 F0 t/ A/ U* S2 \3 b; Z
UARTPuts("\n",-2);
! ~0 |, u$ F2 o3 Q7 U0 h) v
}
) R5 O4 v6 ~4 n6 p. _( y/ e
}
& r8 x+ `! F4 n$ h% F4 A J N/ A
4 m- Q9 [( e6 u Y& E
}
2 k ~; [! o1 U8 ~' W2 W# u. V
3 F1 }( b% h& r3 A5 _$ @/ H% y
# ^+ }- S, Q8 j: j6 j- O7 m
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 @' e" Z8 G5 S( }- y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) [- G2 N F: `
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4