嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- q% `2 v# E! V% X
Void UPP_TASK(Void)
' J9 y! P4 F) c1 i! T/ s
{
/ k4 |2 z* ^; V; @) [
& G4 @. Y6 Q L) h3 \7 d
int i,j,k,target_int_count=2;
( S* P. o4 x2 D4 E F) H2 a) s
char ch[2];
2 w" h8 v# ]7 x( g$ V9 u/ x& `, V
. e6 P2 c; x3 J- g
1 q8 m" ~: B% S" h( H" e
6 n4 q$ |! i" ]8 n$ k4 @
upp_interrupt_count = 0;
$ \+ p- r5 e! U4 ^" J
upp_error_count = 0;
" \7 d" p$ O! ^0 T
! }- S' z9 ]. V; r9 h
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ s L+ B q, k
// Initialize data buffers
( a& A0 X, F9 H1 K
for (i = 0; i < upp_frame_size; i++)
8 [+ s; f" W* t3 R+ u
{
6 H# C: [' c/ P- q6 g
upp_buffer_b
=i;
& w& F6 G) f/ D9 J
upp_buffer_a
= 0xDEAD;
0 N# d; g k" |" t* s! q. M; o
}
8 L7 u9 ^$ j! { D
( J3 Y- M1 b' \3 R0 }9 A
//for(i=0;i<1024;i++)
0 N& @: w) I" k% }- W1 r
// temp
=0;
' `. t S; a# \/ X: X
0 m1 O& Q1 A! @
//UPPReset();
. M0 J. t. n- ~# v- E
/*启动UPP DMA传输*/
3 {+ s1 d% J, @3 [
UARTPuts("upp_prog_dma_i\n",-2);
4 W* z$ j% h- l- V, @3 f" [
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
. m& _8 B7 e: y8 q! V
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 m$ P7 e2 w8 A" V R
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 u. ]0 T! o% Q# N: h3 `- B
2 l# d B4 i$ j/ o( A# ?
UARTPuts("upp_prog_dma_i\n",-2);
) v/ `# p3 w2 v: D
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ x" K3 g& N9 z' D. Y
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 F2 u& r( h( u I o5 k
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ ~2 D f' Z: W+ |3 Z
* V/ j3 Z! i# _; r4 c
/*等待UPP传输完毕*/
6 Z4 Z* K# b! S# z( m
//i=0;
: l$ o8 Q9 `6 K( u6 _8 e
//j=0;
$ R3 k( R4 ?& a, y6 {) O
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: J8 X# ~: z7 x$ q! W0 ]2 @3 p
{
3 @ h" n! C6 v+ R, m, j3 K
/* 测试UPP传输的同时操作普通DDR数据
. C0 P4 w0 v- [: r: m/ J
temp
=i;
3 I! k4 X$ j+ q3 ^& B v& c
i++;
9 L! K3 ?1 e5 Y. U! B& z6 `* A
if(i==1024)
5 i3 h, V8 }# Q) p
{
' Y3 ? _) ?# b' P5 b
i=0;
9 e% c) o1 F1 x8 T
j++;
1 Z8 e$ w+ I/ `; A% A+ I: w
}
+ C: L" m3 _9 O- K& w2 Y9 {
*/
* q, x0 `1 d. w* `- ^
* k" n2 u, n$ a% ?2 {
asm(" nop");
7 [0 [6 k! D. q" w
) e' b# Q" e0 x/ @1 Y4 y
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 o( a5 ]- N( x, M q$ ^
}
3 i- m9 Z+ h# j+ }4 V1 L
4 Y$ U0 S9 J3 W% s( \! B
/*检查UPP传输的数据是否正确 (loopback modes only)*/
) \7 O" M, N d; U8 ~
//UARTprintf( "i=%d\n",i);
5 ]' a- T) [$ U# D) }8 N9 z( y
//UARTprintf( "j=%d\n",j);
( P) r, s0 r& P
UARTPuts("Data mismatch in buffers.\n",-2);
$ [7 N# t3 i9 w+ P& o+ C; x( B
if (upp_interrupt_count == 2 && upp_error_count == 0)
$ b& d1 R/ V- Y1 Q" J
{
0 C: T# X) y0 `7 D( d) U
for (i = 0; i<upp_frame_size; i++)
7 |" Z4 t$ g4 X% l* l1 @
{
! T+ ^9 F1 T) n% j& w1 B7 U* u
if (upp_buffer_a
!= upp_buffer_b
)
. H) T* f# Z1 C9 q0 T
{
8 R& | C" [, K% _, b& |
upp_error_count++;
* e& F8 C; V9 e {' ]5 o5 F
}
# b, K9 B# B, C) E3 e
}
* A8 z, r/ k# H
}
! A& V# e' L. S- j
- V: }+ \8 N( n8 ]8 }5 z
/* 报告通信结果*/
' W- I8 {9 l( ~( f" c
if(upp_error_count != 0)
' H0 |: z. R" W# ]2 i
UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 o0 P9 [3 x' B; N
else
" \. O/ g$ Z% @% o
UARTPuts("uPP transfers complete!\n",-2);
: O% z \0 j# S" z; s6 y& I% t
# p/ T3 U6 T6 y8 I: ^
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* G$ p1 o* ^$ m7 F- ^
UARTGets(ch,2);
6 l# v9 Y1 g: l, @6 Z- ?
UARTPuts("\n", -2);
+ _7 v5 ]' J$ H
: {% d+ o! f# E
if(ch[0] == 'y')
A" h/ V6 d; v. G( o0 u" o
{
) X6 r- F% z0 r( t
/*打印全部读到的数据*/
( Y+ n( v/ b5 A$ l# }3 Y$ z
for(i=0; i<upp_frame_size; )
; z/ T+ F# U* [' P. Q2 U
{
5 F3 P' F7 P9 Q+ p0 Y
for(j=0; j<5; j++)
: W* |! d, c& a+ D) s
{
6 n5 {; X7 X, c: }# n+ X
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 y2 `' f }# q8 n( d0 ~& Y) Q
i++;
1 p: {$ X% \/ C8 c l& `7 R0 j. ~
//if(i >= 4096)
4 W! ^7 p! O9 B5 p/ P
// break;
: |) c7 q3 b; P* @( Q! K
/ l& ?, a- _$ g( u7 x
}
; ?# d6 ?! K% o" A
UARTPuts("\n",-2);
' r5 G! t" A; v- t/ k7 V$ @! h' @
}
7 c( m$ Q3 y0 y* J, y5 p! i3 j
}
) Z; c w. E! r" E: ^4 P
8 P V& H+ d4 n+ q( }% s% m
}
+ d. E, ]6 T/ F) P' g7 |5 B* K
' R s% L5 ]. z( A6 x7 n
2 ^, l# q$ j3 P) @8 U
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* @8 C8 z% `$ t" t$ [7 n
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- o$ r* x7 R7 t
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4