嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
+ [# j) k j/ t8 V& O* C
Void UPP_TASK(Void)
6 A* s" w8 `6 {- C0 q
{
$ p3 G7 v% U$ G( W
/ x+ @- I: F) l
int i,j,k,target_int_count=2;
9 e+ F) L5 A2 ~ i0 D5 V( _
char ch[2];
, S! e/ Q& V: C# {, K, g
! ?4 |7 g$ q6 c1 O4 E
. g3 c: C9 ^, X7 [
* \( W9 {) x6 c6 W
upp_interrupt_count = 0;
0 ]* L. W* w" W% c
upp_error_count = 0;
+ E, H; {' j+ \ M, y" p/ z
7 y; Y4 r1 Y; K ~9 n |2 J
UARTPuts("\tResetting uPP buffers...\r\n",-2);
K: |- q8 T& L& ~) J
// Initialize data buffers
) a7 U& [/ L- e! `2 n
for (i = 0; i < upp_frame_size; i++)
4 X% \* @1 ]# t( q5 H+ R
{
8 k0 d3 c+ \$ A1 Y3 Y/ Z/ H
upp_buffer_b
=i;
# V+ {1 |; R* M" Z+ v1 b) j
upp_buffer_a
= 0xDEAD;
! {! I& b+ j2 J' X" P3 m Q1 l
}
# F8 A6 [4 w% W
$ p# E( }5 l( b. i( m2 w
//for(i=0;i<1024;i++)
/ h6 g/ K; W, @4 E- v* \% o+ i
// temp
=0;
& x( ?0 d/ k$ f: U+ C! {
- q2 c% {2 {8 j- K, x. R
//UPPReset();
. t8 g: i2 v+ J2 G" L Y5 `
/*启动UPP DMA传输*/
0 K7 B/ e% v/ j5 Z+ p- w1 A
UARTPuts("upp_prog_dma_i\n",-2);
2 H7 x* U7 F& Z- V" S2 |
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 j0 P$ j: t" p: F3 @! _! C2 s0 ^) m1 q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 Y# i3 ?2 c1 B! b! j
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
0 b% l: K' y; T0 {) D1 V2 n
# R9 x+ _: R9 U9 r% \- x. w0 Z
UARTPuts("upp_prog_dma_i\n",-2);
( O5 t2 j! T( j; U* ^# S
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: w& E) T% }7 }; @2 I" m
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ z! t0 Q% g4 |+ I0 ]' q; q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 b v" a7 t+ ~0 U
$ {0 G c$ K* @5 ^1 S4 T) Q, d
/*等待UPP传输完毕*/
L: _. D k8 ], _
//i=0;
, `0 j7 f1 @* n# \1 v: ?# R9 j+ ?9 c/ h T; A
//j=0;
( L: a3 F, {4 d( ?1 X
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 p3 o5 M3 L$ k1 \6 c. K# {
{
/ q W3 H% t8 D" o/ b
/* 测试UPP传输的同时操作普通DDR数据
4 w, |9 z2 p$ \% u
temp
=i;
* H! r' E7 a$ t
i++;
1 b; ^5 F$ m! D. h0 t
if(i==1024)
' @( j# _' D U, J: w9 E
{
3 T* E" H: q) U
i=0;
- a) d* T- H- r, t
j++;
" \7 H/ ?; u S
}
8 k' c! f c9 q3 M) ]1 p/ P
*/
- q$ X1 K" t. J2 M$ A( I' d
5 E8 M: ~/ y& p0 d b# B. V8 B
asm(" nop");
/ e9 E* d& W: r/ ?
' k9 G% j, ^0 D/ _) ]% X
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, ]4 j* p) v( G/ }- t
}
* ~! L% T$ g8 ?* _4 P5 W1 U$ p
( z1 A* l2 H" _$ Z1 T' [
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% A8 R8 u5 L, ^% X' c: J& X- E
//UARTprintf( "i=%d\n",i);
- ~! Z6 V1 Q8 W. C+ U$ ?# c h
//UARTprintf( "j=%d\n",j);
( K, p: @ |5 `1 a3 c7 T" @
UARTPuts("Data mismatch in buffers.\n",-2);
" z6 g2 U8 x7 t8 P4 R! a5 r5 Z
if (upp_interrupt_count == 2 && upp_error_count == 0)
2 _& J4 l' w' Z8 `
{
/ ]+ Q. j6 R3 A0 C% P& t7 G: h
for (i = 0; i<upp_frame_size; i++)
$ U9 d \" ^9 U3 W
{
: }( |7 T, j# _) @1 J
if (upp_buffer_a
!= upp_buffer_b
)
8 `, I; x/ G+ Q3 E. e
{
0 y' S; u- C& I
upp_error_count++;
5 q5 o& V7 n: |0 v2 b% B
}
% B% O- Y4 @# [5 S" q# g
}
8 o4 H; f) v( n( H9 ?
}
# f4 P5 H- g; U2 I, [
+ o. y5 d* e7 Q
/* 报告通信结果*/
* J; s1 U0 Y& }- G1 G
if(upp_error_count != 0)
- R1 b* |. Q$ L- D$ {
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% J0 y* s, j8 ]# V* p
else
2 w2 \7 j/ o6 ~$ ^
UARTPuts("uPP transfers complete!\n",-2);
# C0 H% F0 f% L2 |9 I
7 {. E: x% G9 ^; l/ D
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 `3 e: r0 T: w& X. j
UARTGets(ch,2);
- k2 T4 ]0 z! x; r# ~4 `) ?) b- n
UARTPuts("\n", -2);
( r/ p# }+ g; @% m% P
" m/ [2 O4 f0 ~0 B2 U" T; C1 y
if(ch[0] == 'y')
) a& K- D: k0 V
{
" ]4 P# d. `7 ^0 \& y$ f$ R
/*打印全部读到的数据*/
2 \" |# y7 o E! ?1 L) W' b
for(i=0; i<upp_frame_size; )
" [& U+ Z/ R% Q
{
" s: q, j) `2 J' Z- m) f2 `0 ?
for(j=0; j<5; j++)
* O" c/ @! g# Z8 w9 F
{
; g1 D1 P9 U( h# G; p: }% F
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
% \9 p! K- r0 ?( N3 F2 F' |& P
i++;
; F* D- I* ~/ f! M
//if(i >= 4096)
- @# E7 [. e( [# z
// break;
/ S$ R8 l( I. W# M5 K% u
|3 }* j8 c9 H7 h7 u
}
2 d6 A9 [9 f0 h4 @/ C
UARTPuts("\n",-2);
, J5 O3 O" f; ^- K- \ O g
}
. _2 R& U! R( @) k* E. X
}
% ?9 }; N$ s- y& z
' C$ Y. q+ o( p N
}
1 J6 Q8 R) t* u
t6 B8 c+ {9 d
; ]+ `) }! Z" a9 Y! H1 ?/ _! h
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
9 p _) C3 Y* P% n1 r" G! B( _
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 U& }( ~& P$ G2 A
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4