嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 q5 `3 F. ` U5 b+ ^) `; z/ @" j
Void UPP_TASK(Void)
: R, r- f. u: C, ]' ?2 \
{
/ s: o# u3 I: p) H5 F' O
. g1 V3 E, h+ }4 y% I0 L
int i,j,k,target_int_count=2;
" a+ u# L3 j6 D e' y! o9 Z1 y
char ch[2];
1 b3 `* ?' T/ c4 z: c
" p ^7 L: a4 R8 B/ ^2 _' [
# t5 k* N% e) q5 [, w
+ a+ g$ \' L6 o9 y0 H* }
upp_interrupt_count = 0;
7 \2 U/ b5 \* E& d G2 b
upp_error_count = 0;
& @* [; h% W# S1 r9 z0 k6 a; K: h9 k
( t8 Q' P* }7 Z
UARTPuts("\tResetting uPP buffers...\r\n",-2);
/ D" R: T$ Y) N6 z- q* E
// Initialize data buffers
1 q5 u3 r0 A: ?5 n8 l$ G
for (i = 0; i < upp_frame_size; i++)
6 d, K4 o' H1 p+ G3 ^! c
{
5 E8 O* E. z, u1 z
upp_buffer_b
=i;
" @9 r3 r; d8 X' v$ }* ?
upp_buffer_a
= 0xDEAD;
" f. a3 C7 u* {/ S# N& N
}
9 m n; o6 B# q8 i1 ^& u* p7 |
. I; l0 b% R3 t5 t+ V1 D
//for(i=0;i<1024;i++)
+ E# M( |3 @& y/ H
// temp
=0;
1 G3 Q$ L& R3 u. k: c R
( v- X% \, ^7 K* Y3 b- ?: B' A0 G) {
//UPPReset();
: [1 M+ @1 R9 Y) W! O. t
/*启动UPP DMA传输*/
. U7 w7 }6 ^- c, r/ t
UARTPuts("upp_prog_dma_i\n",-2);
" M/ i8 ^+ Z2 V: C4 V
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# U6 e) _5 s3 }5 p( Z& o: ~" f* i
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- B. Y/ m4 r0 r' u2 o- T
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: w+ {$ Y3 p; k# ?5 D, k. q& R
1 G+ G; r1 q9 L# a* q
UARTPuts("upp_prog_dma_i\n",-2);
2 z7 d1 S0 }/ `( e
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. ~7 l4 A! ^( V
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 } Q3 V# X3 e' ~1 j$ }
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
% L! ^2 O: @$ h* N; }
6 \9 {, Y L; x) M
/*等待UPP传输完毕*/
* R8 C1 w5 h7 _8 S; h7 l
//i=0;
! p6 J8 Q9 ~+ o) s+ P6 P
//j=0;
7 v2 E1 _) E' T
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" R/ D* z8 @, t% i
{
3 j: {1 @7 C1 C0 y2 A8 B
/* 测试UPP传输的同时操作普通DDR数据
; K* u2 a4 L) M: a& |* D$ P
temp
=i;
, p5 n/ _. m5 S: S/ a9 ~
i++;
, ` [5 _/ O: s- J6 P% ~
if(i==1024)
6 j6 g/ v+ F9 p
{
1 f- v$ E) D/ e
i=0;
- K: [* d; _* m @& D
j++;
9 J4 y1 b- C* ?# L- t5 J$ P
}
1 x, N! z1 T' m/ l- m
*/
0 Q& @: Z- o t1 { U& S
5 B1 T2 ~# f+ \$ B6 z {9 e
asm(" nop");
3 r7 K- d; B# y* U F7 D: g
6 l% R" P( X7 Z* R$ K& P
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
4 K) ]3 u, H9 C- d7 y' i2 b
}
' U& @! Z$ z# i: T' x
6 x& Z8 L. D7 b! Z# C t+ l+ t
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' G7 [. ?7 R5 q3 h
//UARTprintf( "i=%d\n",i);
5 u& [$ k: r8 b& `% _' l, S
//UARTprintf( "j=%d\n",j);
: z- l! d8 z) ^8 ~- {
UARTPuts("Data mismatch in buffers.\n",-2);
+ Z. {# a, H3 p2 I1 k1 v
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ c# W% Q. L0 I' g( M
{
. P& o7 ~3 u0 Q8 T8 R4 A
for (i = 0; i<upp_frame_size; i++)
' ^7 |- L8 ?1 j$ _4 F6 F) B
{
! {" v& f% x$ x) X; J2 a
if (upp_buffer_a
!= upp_buffer_b
)
6 z# ^3 j3 N% K8 G
{
* }& _" e1 W2 S9 U
upp_error_count++;
$ }, K3 }5 j1 i6 i h5 \
}
0 q* |* q' t+ d5 s/ A1 z: \* q
}
2 m' E M% Y" k/ `) y
}
: W, D# v, |" ?" R2 }* ^# E, S+ I
2 C4 W+ h7 K6 z, s; U2 L* ?
/* 报告通信结果*/
6 D# o6 g1 j: g K
if(upp_error_count != 0)
9 b2 u. Z0 G: U F) K4 _4 u
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 ?4 z+ W( T. ~2 c% s# J
else
' E, v& Y; z* @) y9 _# \ \9 V
UARTPuts("uPP transfers complete!\n",-2);
/ M9 M, J, T: e: d* h9 z
2 e# C; B7 C% F; j, A& S% t m7 ~
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; \' N8 U1 Z: J' w! f/ n; p
UARTGets(ch,2);
& G0 w( G! n/ S+ B X
UARTPuts("\n", -2);
, A( d' E4 a& N1 D/ Z/ r6 [' r
6 a6 T; `) t6 v1 W- Z4 g( z
if(ch[0] == 'y')
, T( X/ v, U4 Q
{
6 w6 i! p ~. r( G
/*打印全部读到的数据*/
, n5 Q/ [6 Y6 i" t: E% y- [2 q5 J* e
for(i=0; i<upp_frame_size; )
" M8 j' t% W% Y1 M, T
{
; M! N3 i: ?, Y4 q7 t5 g7 l& m
for(j=0; j<5; j++)
/ Q: r( D& O' ^
{
# b% Q! \& s$ m! ^# `
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 s' Y5 u! F* S! I# Q5 o
i++;
% T- x* T/ z/ i: o/ |, _5 \
//if(i >= 4096)
$ z) ~! O% ?% j; G9 {
// break;
% g1 ^( R! _) s# k0 ^ T/ u5 K- c
* {" Z# C9 O- V0 v7 ?2 V0 f/ J
}
$ L' H. I! v: A
UARTPuts("\n",-2);
; \! ~! o$ b# w7 @7 K
}
* u8 B3 `' S$ ~# n: u$ e8 H/ M- S
}
/ [6 G7 k# i W4 b$ E
( |0 J! q# B# M" u! w5 ?7 _9 j
}
& i+ C- F1 L3 q1 w* J5 r' i
9 E. P: A% K) |: ~7 N
: ~: T2 h* x: @+ d* b
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" g; G% t5 W) ]$ I2 A4 L1 k) C
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ V1 v j) A% Z7 o
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4