嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 V# s. h2 y* B
Void UPP_TASK(Void)
# X k; L& N3 Y/ k! h& z0 T
{
2 S8 H, b3 l- `( H
; K6 k! O0 U$ q
int i,j,k,target_int_count=2;
) k' t+ ^6 T: W$ ~( g* z/ T
char ch[2];
. y& g1 ]; J3 b) R' v- k
4 `& A2 X! e7 } e& x
7 M' j4 d6 n5 l' x" o* V
4 T% y+ F( Q& n# y
upp_interrupt_count = 0;
- k1 j o; L4 j1 l8 [2 H0 X
upp_error_count = 0;
5 V* `* F' T0 o: L' ^
* [. z# x6 k. ]0 O
UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 }9 c7 y% |' }! h; o4 |3 Y" {
// Initialize data buffers
# @: D! _( V" T( @. G8 |9 K
for (i = 0; i < upp_frame_size; i++)
* l* }1 m2 ^$ n# V. _: V
{
# ^6 `( U+ s( H3 s
upp_buffer_b
=i;
. H9 C0 u* Z( P
upp_buffer_a
= 0xDEAD;
. _1 Z0 I R4 V& ^7 _0 h4 O$ q& W0 c$ v
}
% V, F! z+ p7 ^6 `. X' p# O. O
. ~( H2 i# m8 W7 Q- r: O
//for(i=0;i<1024;i++)
3 A; G. Y. a& [+ @
// temp
=0;
* K( Q% {6 n, h0 C" C1 M
5 C/ N3 k- w& W: ^
//UPPReset();
5 p& F; m! S- Y
/*启动UPP DMA传输*/
0 n3 U* O2 ~- P; a) e0 y) v
UARTPuts("upp_prog_dma_i\n",-2);
8 m1 L# H& {0 _# Z; N
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
, P: G9 d% D0 l0 b0 \5 `* C' V
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- \8 D3 w2 n3 l
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. p+ O* N# N! z w- D- u; M2 w
0 ` `! S- S; N( z4 f8 n2 i
UARTPuts("upp_prog_dma_i\n",-2);
6 f2 j l# h! ] V
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! E# W. Q) V- @9 j# z7 ]2 \3 L0 ^
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- ~# ~4 D* c+ \6 M8 r
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 Z. p) v7 }4 n7 ^/ S" a! J8 q
/ |: T& U: x& I6 v4 i
/*等待UPP传输完毕*/
' `4 b' I' q) ^5 U7 G9 Q
//i=0;
3 l5 j m4 p0 _. ~% D
//j=0;
/ P+ u# y$ L* z& \( w
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. a0 y% u9 w0 Q' k/ Y- E$ w
{
g d# P0 p) d/ u( h0 F& r
/* 测试UPP传输的同时操作普通DDR数据
# W' w" }% V8 {: ]/ l7 h
temp
=i;
2 E) x$ G- N0 B2 G$ m7 k8 H
i++;
' |6 L! h* f& t" O" ~
if(i==1024)
3 Q/ S- k+ n5 K% l1 \6 S! ?$ b$ v
{
7 v W" H. l c# c, J) c% T
i=0;
) h$ V. e2 S2 w
j++;
# r$ j% o5 f. l2 R R
}
2 g3 s3 ]; l g* j. B* P; d
*/
2 n& a7 a6 W9 |" a5 q
& r. ^3 T4 {, { Y6 C B
asm(" nop");
( r2 i1 z3 n: @- _- \- I
* }& k$ m/ i2 U7 d. y- A9 p \
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ E6 y% T* o' {" t
}
4 N" q5 F& u/ u6 I+ ?' Q* S$ C
5 a+ u, m* z5 U1 y0 A
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( K6 e8 y# w/ q
//UARTprintf( "i=%d\n",i);
5 V& G, Q2 ~! Y5 {3 M2 H' T! p
//UARTprintf( "j=%d\n",j);
6 E: `; ~: j0 r6 l0 o. G; u' Q) E
UARTPuts("Data mismatch in buffers.\n",-2);
5 Y+ \- H" g! C; o+ j2 T7 H* b
if (upp_interrupt_count == 2 && upp_error_count == 0)
, k- @' @7 Y W6 I1 T- R
{
) t' V4 u6 g) e) }) y8 `
for (i = 0; i<upp_frame_size; i++)
. l# L4 x# W1 p4 o7 ~
{
9 G6 `% j/ h4 N+ e
if (upp_buffer_a
!= upp_buffer_b
)
1 {7 y+ R" D4 w
{
! [+ t6 B6 G8 h! V
upp_error_count++;
2 w7 N7 i$ j6 S8 d: }; n4 |' {
}
5 l+ x, A0 |, x+ g
}
) _. G5 O; d7 V6 R
}
# _4 d1 ^1 a6 X. S4 J
, C h( U) O1 z& ~8 S3 H
/* 报告通信结果*/
5 R2 x4 d( `- w, Q: _
if(upp_error_count != 0)
d9 L7 V. z8 {$ x( i+ m
UARTprintf( "upp_error_count=%d\n",upp_error_count);
& u/ Z- w4 k. m
else
1 j3 g; P, N9 [8 b; D S. M5 x5 A- l
UARTPuts("uPP transfers complete!\n",-2);
$ x7 N6 o$ E* ~0 w
/ @2 x( o8 C, [/ q. x) z; f+ c
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' V+ Y6 T, F3 S/ l& Y
UARTGets(ch,2);
/ J6 l X$ r4 d3 _
UARTPuts("\n", -2);
+ {" X f# Y5 Q1 R; ?
9 j+ J7 _$ O; R( c: h1 ] N& ?& }' ?
if(ch[0] == 'y')
' Y0 M5 G1 b. e% X5 L
{
9 M( t S4 V4 O. v
/*打印全部读到的数据*/
# e, Q' j8 K4 Q+ w( W# b0 A
for(i=0; i<upp_frame_size; )
$ a, X5 a; @1 u' ^4 X0 U6 h
{
' M3 k- R+ F. _
for(j=0; j<5; j++)
$ M$ w9 ~$ {5 z* S
{
" V, D' R# m, k( m% a
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
" d. Q. u& e* ?9 \3 b
i++;
+ C& E- G5 ^8 R
//if(i >= 4096)
) [; y- l- g% e( p+ M
// break;
0 s2 ]0 ]3 X+ L9 y; m
- B9 u) ?" D8 o3 k6 m' [
}
( W3 h% ?. h3 J
UARTPuts("\n",-2);
" U) H. ]; b" r" {# |4 _& z
}
! ?# a* ]2 r* Y. g9 z
}
5 z1 ]+ x- g7 H& D1 U2 y! }6 e
0 k. V7 O( U R9 Q
}
7 t# s1 K6 R: p8 J, \
' z+ O/ J9 c3 M- f
4 N" }2 [2 K$ J) u5 f$ `- f9 i8 |
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% w0 K5 e* E" G5 N+ D
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ i" x' F$ ^/ f0 z
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4