嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% R3 P- {) V! u) ^+ I0 L/ [6 F
Void UPP_TASK(Void)
" p6 d7 b) H: ?' f7 g
{
1 w" \- P: b& ?9 E
5 P" A2 c8 ]9 w0 E X; \
int i,j,k,target_int_count=2;
1 S9 V0 R: F& H1 \: p( Z
char ch[2];
4 l- }6 ^! T: G& t/ r9 V& d
' x& f4 ]: A$ F: p/ u1 H
" g2 R7 E9 p* c, R
v. b t, ?% L' `* C* \% z
upp_interrupt_count = 0;
* z" e1 X7 F* y, ^9 W! q; G. w) l0 g
upp_error_count = 0;
: [( V, M) T0 k v' R9 L8 R' l
% l7 O4 z$ {5 F; {$ j
UARTPuts("\tResetting uPP buffers...\r\n",-2);
) R2 F: | e& |
// Initialize data buffers
7 y, S8 H7 `7 ?7 I
for (i = 0; i < upp_frame_size; i++)
3 s% m0 m- t- \ Y+ W! }
{
% [) m" c w9 ~5 b
upp_buffer_b
=i;
, W) C. ^/ g9 b2 V, M
upp_buffer_a
= 0xDEAD;
7 L5 |& h" ` H0 N8 U! J: G) r
}
. f% ~& m0 A0 m
3 p+ c. }* x7 d- B
//for(i=0;i<1024;i++)
( o, F( V5 E: x8 n5 d+ p! z
// temp
=0;
' O' Z% \9 F! j: R: x5 q
( s! P: E/ v9 o9 R _
//UPPReset();
$ Z) L# U2 U% b
/*启动UPP DMA传输*/
7 x5 n! K0 @/ e, d+ x
UARTPuts("upp_prog_dma_i\n",-2);
, X' J! ]; w. ^; J: O3 u
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 i' ?" K3 |0 v6 m1 x( U& a
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ T' U' G9 @2 G5 F2 n% ^, o
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% I) {- D! [4 T) i) ?5 [1 E6 q
M0 O, h% A, W; S# }3 p4 \2 Q" o
UARTPuts("upp_prog_dma_i\n",-2);
5 w. w7 X+ x; q/ m _
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 F+ w o m" l! D6 C" o, r! f
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ t; V' b# `1 T% _0 W2 n
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ e$ W$ d+ z7 o6 C- _4 x/ A
0 D1 Q( j) d& @8 J( s- T
/*等待UPP传输完毕*/
" I. c# |* a. b U3 l. Y' Q* ?# J. ~
//i=0;
- \; U# c+ T1 g: f% ? I
//j=0;
6 E8 M! F' U; {9 m- H3 R
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
H. H+ h/ Y/ G7 v4 J
{
- c7 I! K2 l7 P1 U- [; @" B& J. Q
/* 测试UPP传输的同时操作普通DDR数据
! G$ J" D$ {& J9 e5 W
temp
=i;
; `6 O+ F) _( K5 G, K1 L; r
i++;
. r/ T6 H5 D+ ]. }
if(i==1024)
/ g* q8 ]5 l% o1 \9 O- b. F
{
# @; Q0 n) s4 A9 x1 h( ^; _
i=0;
; K! s) N9 u7 @, @
j++;
$ h7 |# P6 C9 K* ~) j
}
+ A" [" F4 L/ N# Z1 e% ^
*/
" g/ ?+ N; h. r! a: \/ m: \
3 o3 ~( L( N8 m3 n6 U0 j
asm(" nop");
3 }4 V4 o; o( C, w& W7 C$ Y r( a; N
. P R" e) |& P* N u
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' l4 ?8 @) j6 T( }" M; H: s i
}
6 F; m2 V! l/ ], E
4 |3 V5 r1 J' J! v! q
/*检查UPP传输的数据是否正确 (loopback modes only)*/
4 w' Y( H" ]8 Z) v& N ]1 l0 x
//UARTprintf( "i=%d\n",i);
5 v4 D; z+ P$ ]' }, [" z# W# N
//UARTprintf( "j=%d\n",j);
, ]% n p1 N' p" E
UARTPuts("Data mismatch in buffers.\n",-2);
) Z2 \# H$ S* ?: E4 I& c
if (upp_interrupt_count == 2 && upp_error_count == 0)
3 O* G, k+ q6 ^1 M
{
* x; O9 N! u$ w" L& m
for (i = 0; i<upp_frame_size; i++)
, \" b' X' C/ `
{
' M. B! F& N0 L- }9 L7 ?" Q7 u
if (upp_buffer_a
!= upp_buffer_b
)
' r, L( X+ D! o" ~- v3 [& i! z
{
0 A e. [8 C0 R1 G
upp_error_count++;
4 v7 j# g6 Y i- o
}
$ K; D0 C6 F+ F$ W* `. z$ O3 W' D
}
u9 p2 C2 b4 }. c/ }) P/ Q
}
4 l# U$ ~; f6 `+ U P2 `$ s9 @
7 a4 R7 Z! E+ a, t! _7 w
/* 报告通信结果*/
; V o0 I8 p4 H0 q" {: h; a* B& p+ t
if(upp_error_count != 0)
$ j! s- Y/ c2 T/ f. q% ~
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. k! z. u! q4 j9 U$ @7 P
else
9 X/ [ o+ ~7 f# J. ~& e# ?! P
UARTPuts("uPP transfers complete!\n",-2);
- A, v! j+ K$ Q8 N0 F6 @0 p
' x1 I4 T% \+ k7 ~- T* ?
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& d% |* l& @1 B* |, Y6 l9 V
UARTGets(ch,2);
4 f, d$ y7 h9 Q9 V7 N, \
UARTPuts("\n", -2);
9 R' W7 H- P% q3 }4 K" X2 K
* O- a% L6 P2 H7 K' d, _
if(ch[0] == 'y')
8 ` U" t$ h- u" I
{
! E# G* b5 s/ v6 f0 Q; E& P" B
/*打印全部读到的数据*/
. W+ l/ d) N% T+ b8 w
for(i=0; i<upp_frame_size; )
( a, I* e. l/ A1 |$ i. a
{
* Q }: H0 |# l, M/ }
for(j=0; j<5; j++)
& v. V/ {$ ?. }
{
4 q8 c- W- [* h
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( z2 J. e3 Z5 m! ], a2 u
i++;
% ~1 m& P. h' Q0 t2 F8 @' ^+ E1 R' c, O
//if(i >= 4096)
. v6 K+ W y2 ?. L7 M7 m2 D. H
// break;
% X7 [3 @5 E$ R5 X
1 s2 Y G( X! B0 f: \5 U
}
* A4 v4 J8 g4 x9 U. s8 u; }
UARTPuts("\n",-2);
7 m- P' p, }0 j4 l% R2 H
}
* `- E+ P/ C0 G! i
}
9 d$ z0 Z0 ?; I8 D0 `9 ?
' O! N! _1 B: O; ^
}
7 X" n: P0 |- `& P3 x% w
- I' k- d( ?) h0 z, u1 P! s# e
* r @: f+ |( P, ~2 h. P I' o
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 Z0 U0 ]) A" R8 f: U5 z. w
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% ?, V+ p$ s3 ~5 r
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4