嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 u8 L/ A) T d! L% F+ ?
Void UPP_TASK(Void)
! I. s' X) k2 @. x. d% A/ n }. @1 f. u
{
+ ~- T8 I1 V- q4 @. V
) z; N+ j; N0 w0 x% F* `, T5 Z* H* ^
int i,j,k,target_int_count=2;
D- h- H, K' w
char ch[2];
8 `# a3 F' x3 U* F% P1 M8 ]
|! c4 H. _# u0 ]4 N: @6 f
+ q: {8 n$ N8 H6 F3 P
- | d- x1 P7 U; {% J
upp_interrupt_count = 0;
$ g2 W& |) @8 ~6 Z
upp_error_count = 0;
$ O7 R, t4 C+ _1 w5 b( H
7 U; M! U8 k( |3 U) r) Q+ G
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, `: y2 l9 t/ S! ^6 K. v* h- j
// Initialize data buffers
# T7 K1 k. M5 c# L: n
for (i = 0; i < upp_frame_size; i++)
3 S8 |0 b6 u2 P1 I5 x. D* K% j
{
9 _# j. Y0 m9 L& A2 ]" z- _
upp_buffer_b
=i;
' ]( F. d6 a: Q& h3 F- f+ d
upp_buffer_a
= 0xDEAD;
: P+ @8 _3 a, r; ?/ t
}
X7 o+ v2 C4 B7 B& `4 S* i8 v5 \" [7 \
5 f2 v ]2 u* s* | X9 l
//for(i=0;i<1024;i++)
* R, ^+ m+ ^8 `$ ^4 ^& T" u
// temp
=0;
( S9 R7 m& t5 x! H0 ~
* U* C8 T% U/ d3 Q
//UPPReset();
$ ]4 V- I0 z$ _) ]
/*启动UPP DMA传输*/
9 M; S' k. t x& L
UARTPuts("upp_prog_dma_i\n",-2);
7 l4 u$ ^, D0 e4 Q7 |
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: I F8 t6 G' W' @ b# T. C5 O
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& F7 n# ^' v5 M9 L+ q
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 Y! Z# G4 j( V) j9 L- `
' H9 Y- T, _ \% c4 `* U# s
UARTPuts("upp_prog_dma_i\n",-2);
; F4 {4 m/ M) I2 t: b
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
* Y% v# ^2 K) S& L
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ z4 R( }3 V& ?1 _4 B
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 S8 i3 k' N! d" f
( v4 E# G: T/ p
/*等待UPP传输完毕*/
$ Y% L- Z& u3 l4 s3 \3 \& O' i. i7 t
//i=0;
2 Q# t7 m# j4 i/ e i- K. a% K
//j=0;
+ a S; k: O- s2 R2 S
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' Z! I$ r8 Q3 n. u/ T/ w# O
{
& K; o+ {4 N% `+ B
/* 测试UPP传输的同时操作普通DDR数据
) r) @! c: i8 E
temp
=i;
+ \: }* R* m) U6 a# Y0 F
i++;
$ V. F; \) E4 F" {) Q
if(i==1024)
$ T; J. [+ ^! x% m' K
{
6 s% s6 L2 l9 D' w1 E
i=0;
( Q/ i& d! h- V6 O! Q4 O) L
j++;
& t% o5 P4 ^+ w- D
}
7 S8 W4 m& v' w+ q( r% P/ ^
*/
3 m- ^/ N6 @- L7 j& T
4 V" y! g; `0 k" p u. x
asm(" nop");
- u* T2 f4 y) W' V/ k
. A2 [5 s$ n& q* i" N9 y7 M
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ W b7 \. L1 y
}
0 E" |& Y- X; a4 C& s( P) ^
( G! C" b# K2 y9 y, H# s
/*检查UPP传输的数据是否正确 (loopback modes only)*/
4 w9 g( S1 h+ K, t& f
//UARTprintf( "i=%d\n",i);
0 t- y6 R& s5 Z: g) Y& o1 K
//UARTprintf( "j=%d\n",j);
& [5 e, s8 r- Q2 ^* S) n& F
UARTPuts("Data mismatch in buffers.\n",-2);
$ {" L6 W3 D4 M
if (upp_interrupt_count == 2 && upp_error_count == 0)
" D. E2 R& v4 L) y( F
{
4 L7 w* v- m! c
for (i = 0; i<upp_frame_size; i++)
R" A# l1 @( g2 {
{
4 d) J( T7 y" H5 j3 H( L. Z1 z6 ^8 {
if (upp_buffer_a
!= upp_buffer_b
)
M- b7 a6 Q. t- A% f; n3 [
{
5 j7 y% g Z9 ?( v T- |. m+ H
upp_error_count++;
- [5 H$ a' h( w0 k# f3 F" F
}
. ?" u. A; j3 r& o& m
}
9 ?- A5 a1 E! m5 T3 p
}
7 b/ a; k( f+ F* R V, l |( i
% I7 q/ L6 ?* x' Y) L- m- L
/* 报告通信结果*/
6 e4 i9 h% ^( A7 {
if(upp_error_count != 0)
2 F6 `; `9 j1 N5 t) V- M4 ~2 e
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. N3 r. u {0 I/ i& L$ {, T* X
else
' l( @" a) h8 C6 o' ?
UARTPuts("uPP transfers complete!\n",-2);
4 _, ?- ~( E6 c& Q7 j
- k; f) ?, L1 [) |9 {" m
UARTPuts("Do you want to print all the data?(y/n) ",-2);
6 y1 |) e0 e7 H3 {% k
UARTGets(ch,2);
3 w3 j$ o( k, P& ]: e2 ?: C
UARTPuts("\n", -2);
c0 m" J5 W3 V0 L0 b, P* }
2 x9 x# }. D& \! |) R* O
if(ch[0] == 'y')
& Y9 w2 z$ [5 ? Q3 S; q9 u |+ C
{
* e. ~5 |/ ?7 ~
/*打印全部读到的数据*/
( h' y! A7 T$ f/ I6 j. N# R
for(i=0; i<upp_frame_size; )
! d$ B' Q, d; Q- x# ~" G
{
: |+ M, M$ W3 E' v( ?5 z9 ]; _" k$ a
for(j=0; j<5; j++)
- D1 _) F2 J$ u# h
{
5 U" x4 ~3 u7 z9 J, `
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' z* T: @- K8 k6 l5 o% o" e! B% [
i++;
. t: @7 Z* L8 _
//if(i >= 4096)
; {5 L1 j! L; G* G+ C: }5 {9 X
// break;
3 {- ?4 L4 l9 S' [& z5 r8 v/ T K
8 Y- X: W: V! Z4 q
}
2 S1 n: k, j8 M5 q' U
UARTPuts("\n",-2);
6 U4 @8 q+ J3 ~% G: v
}
5 f+ w! J* l5 E2 W& g4 i
}
$ h; G' l' i" l9 o B; ?% g3 |; a: P
6 L% [0 u! B/ b6 P
}
% \$ |- H4 Y( x
; {4 P8 Y' r4 f
$ |3 a* e4 J' z, Q5 x
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- I. j/ L8 a$ o0 `
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 H4 x; \% U1 Y8 @5 W& D
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4