嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ A9 z' }* H9 g0 j% O2 {2 f# j( L
Void UPP_TASK(Void)
( U* n" x* ?3 O* E- @* N, D
{
2 z! C$ @( K9 u7 _
8 F) c: {$ p: C3 V
int i,j,k,target_int_count=2;
' n. z0 r8 m# Z: {
char ch[2];
9 ^! }+ A4 M; b9 v0 n0 ?/ B
& y1 Z$ H% b; U
0 r* t/ V( C, j+ P
8 l! Y4 \( W" ]1 g
upp_interrupt_count = 0;
) T; N* i; q- h% n- a. e$ I
upp_error_count = 0;
9 E3 b# I' b! A- t- m+ K5 W9 q
+ |1 y1 V8 n$ S8 H& K1 n8 m& T) j' |" d. h
UARTPuts("\tResetting uPP buffers...\r\n",-2);
5 a, C/ P2 _: S1 J5 `! p
// Initialize data buffers
6 `6 D: Y) A8 M8 n( {7 |
for (i = 0; i < upp_frame_size; i++)
% `9 N9 r; U; _! G; H1 w. q
{
" N& z h y* ^5 j& S# a
upp_buffer_b
=i;
, R1 f; E5 C. v7 h
upp_buffer_a
= 0xDEAD;
. C% L3 [" K3 J7 U2 I2 c6 e3 o# A; k
}
H$ [4 V ^* Q- {) e0 x* `8 n
G" @$ T7 G! U2 e- Y6 }
//for(i=0;i<1024;i++)
8 e5 \1 Z) T8 _8 Z1 J
// temp
=0;
& p5 m% j* W' O1 L. J! P& {$ V
5 k$ l/ M+ ^+ C
//UPPReset();
, ]7 ~% r; Q& ^3 r }
/*启动UPP DMA传输*/
/ i0 u; n8 q' C( s* n
UARTPuts("upp_prog_dma_i\n",-2);
8 q+ c/ W! V8 P
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
4 |7 A5 V4 a+ p+ @3 d8 c" a9 q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; C* Z# W- C$ x9 f% T z& i
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% i; }+ R. j; U- s, V
9 ^& |) U/ ^# p9 b F
UARTPuts("upp_prog_dma_i\n",-2);
4 ^6 T/ O+ O- @: j7 A7 C
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
1 \; d! s, ?: X/ K( U6 |. b
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( D0 t1 k+ D8 k1 q
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
7 R2 y8 P6 D8 o4 O
8 ~! \- I/ q4 _- _: O0 J$ ~
/*等待UPP传输完毕*/
2 E. b+ q# _1 t/ S% A
//i=0;
$ b4 w) T% z: g6 R
//j=0;
! p" F$ Q3 D* a
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! s X s) p7 N" w* @
{
) y N; U& c6 z4 y
/* 测试UPP传输的同时操作普通DDR数据
r4 e8 V* K2 L3 j& i5 m
temp
=i;
) a$ b$ t. w* b7 Q1 P
i++;
: `' a6 ^! U9 W& P) y
if(i==1024)
[- }- l- \$ |$ H
{
) k# c* y7 E+ |% i) [+ Y: {6 k
i=0;
1 f& c1 ~# N' o, n* E0 J; W2 O3 m
j++;
8 R2 w* \' j0 b: }6 G, l
}
2 y6 A4 t4 m; T+ X# P! {4 [
*/
& j( T s) r* _" f: t {( c
+ T5 S8 B5 m! ` i0 L& V L$ q7 e
asm(" nop");
% O ^# X; ~- ^) f+ S/ v# e" s5 v0 p
( |. I; f9 Q* V* b" u- d. l
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# X: W8 z, h! {8 D X* ~
}
* O0 H5 {% G9 S4 V! ?
4 C3 I2 f+ p1 s8 o" y- \
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& x* _ A2 z0 v
//UARTprintf( "i=%d\n",i);
9 t: B( C3 w, Z4 d* l. Y0 ]
//UARTprintf( "j=%d\n",j);
) [( ]/ k& f2 |4 w; H
UARTPuts("Data mismatch in buffers.\n",-2);
0 [! Z: W/ j+ N8 B+ S7 q9 U' r
if (upp_interrupt_count == 2 && upp_error_count == 0)
, \' B, K$ R& H9 [: i- r
{
+ S1 ]* ^1 \% w5 c- O x
for (i = 0; i<upp_frame_size; i++)
5 Y) V9 T9 p1 x ]% g) |0 m
{
J+ x; K# w4 i: S
if (upp_buffer_a
!= upp_buffer_b
)
8 F! |5 k3 Q/ k ^4 o. S
{
1 E8 U6 C! _1 g# A9 n3 R" K7 ]0 k
upp_error_count++;
2 h, [6 S. i5 ^$ Y
}
0 c0 b& G9 w8 u7 z$ F
}
8 l: E6 Z% w; }, e
}
& s8 M! P; n5 O7 m/ N
6 e$ h" b! z, [; u: l7 [
/* 报告通信结果*/
, s0 N- _5 L7 Q6 y% o
if(upp_error_count != 0)
' `5 t, I, w- ]& l2 W. v0 j
UARTprintf( "upp_error_count=%d\n",upp_error_count);
% f7 y' D" l% t% _' @- R* F9 ?' e7 T
else
& r7 I% R U2 b
UARTPuts("uPP transfers complete!\n",-2);
, d8 X% d& p m% V
8 z0 l; q5 M( A% o2 N+ i
UARTPuts("Do you want to print all the data?(y/n) ",-2);
1 y! t9 ^2 n/ [+ e' T; ?; C
UARTGets(ch,2);
1 T0 A9 U3 d" |' |- W
UARTPuts("\n", -2);
6 Z+ K! @1 c. n3 a2 l) S
) H) | A+ N2 x G2 U% _, P( R
if(ch[0] == 'y')
7 D9 F1 o5 [- y7 K5 |) k' v5 G
{
8 P' U7 F! b5 w; y9 r# b+ W& O
/*打印全部读到的数据*/
3 q& t( V: E3 x3 A$ \6 S1 [( N. h
for(i=0; i<upp_frame_size; )
9 e* t! Q+ s, i6 q( s; O; [
{
}7 Q' M$ I9 o0 t v) |2 W
for(j=0; j<5; j++)
' J0 h& ^ p' `+ a7 C9 I. w% k
{
9 L- G! P1 U5 J N2 y. U
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, D `) x5 i' o$ X' w4 C* N# V
i++;
* w( T- v8 ]: R) c4 ?0 @# b, o
//if(i >= 4096)
, X$ n, y' b$ b
// break;
. B; m; }: A2 i, n" Z
* E" B' ]3 p. u3 x( p
}
+ {8 A- ?! R# U0 A; m' ?
UARTPuts("\n",-2);
* l1 x2 M d# M0 U) u5 a) ~
}
) |$ t, G) i; L0 B: ^6 t
}
! d- _" y6 p" b* b( I
# D# V( j1 Z8 ?& N$ t3 V2 [9 i$ p+ `% _
}
8 _% j3 c" Y8 a5 B
4 b; {" I- A7 E1 \* M; _2 F
- k+ v7 ^' G6 K% q/ d, X
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 ]8 U# p) C8 Z. \2 N1 H+ h
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" R" Q; X: ~: u$ c! j- ~& b4 C
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4