嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
. U0 ~' |( C+ h6 Q1 O5 N
Void UPP_TASK(Void)
e7 p' r5 M5 b& w* }/ O6 w
{
5 T4 ?8 `' T8 I- }: w( ?
& b0 C. H- ^7 W! ]4 U: V
int i,j,k,target_int_count=2;
( `5 M0 {& `4 }; z' }6 j) j
char ch[2];
2 T. e1 ^1 c4 ?* {
+ ?9 n- J) | K& H! y M
& }# D3 c9 H; g* ~/ o j1 F/ F2 u
" f- L, ?7 g" `* V# D
upp_interrupt_count = 0;
) {# Q. x5 |( i- h/ x( y
upp_error_count = 0;
, F1 K! X, w1 t7 P
9 l* @ p# m- ~- ~
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 ?+ ~# j5 P8 X; j9 H; s8 g- m1 q
// Initialize data buffers
8 p# m# \& e* _8 J: b" c
for (i = 0; i < upp_frame_size; i++)
7 f, [' I* B; R5 K2 j
{
0 c0 u; d6 a; j- S
upp_buffer_b
=i;
5 ^3 x0 ~5 }' e% x
upp_buffer_a
= 0xDEAD;
! c3 X5 E- D" E; \1 I
}
1 S$ D' {$ S9 S
7 c. z6 R' G! B- Y( D4 M
//for(i=0;i<1024;i++)
+ Z' G8 x$ E4 K/ m# e: S
// temp
=0;
/ C2 Q$ Q, Q- T3 F% z
5 f' c# S, J0 Y. M$ g, g# n" Y! H" F
//UPPReset();
) D8 G+ D2 v9 H$ y
/*启动UPP DMA传输*/
% R( D6 u- _' u6 b5 V6 J. L4 R
UARTPuts("upp_prog_dma_i\n",-2);
' ?" v; L7 F0 v
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ ?3 a$ `' p( s/ ~! k) q2 h
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% F, D: g1 [ e) f+ k8 i
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" m# L* Y9 {2 y& K+ W
; m9 |1 K7 ?, E6 }
UARTPuts("upp_prog_dma_i\n",-2);
3 ~0 M1 K/ y# `+ B6 h+ H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% P* {- K! D8 ]+ {: M5 y$ ~
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" T0 p t% w4 G! h9 D
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
Y! [, ^/ M1 F- m4 }
/ y+ o% ] D+ B6 s) |
/*等待UPP传输完毕*/
" F; u8 ^/ u0 {( Y; t
//i=0;
7 x& T$ M. f" ~7 W6 t! B- ?4 _
//j=0;
5 k8 Z2 L* A; s, I' E
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 {0 W% R0 V- A0 W9 K E5 O, Q: r
{
) [' |$ t- F0 m) Q0 ^- K
/* 测试UPP传输的同时操作普通DDR数据
$ S5 R+ w" e) a- v( o% I" y
temp
=i;
% }! W o2 l5 ?* g/ \5 Y
i++;
6 s0 S3 {) K0 u$ {
if(i==1024)
9 ~5 x4 Z/ M& r
{
6 n* p% W5 Z# b- G, q |- q
i=0;
! Z; a+ j* ]" o
j++;
, g/ {6 f" j7 z) b9 @3 q" Q" V& l K
}
' o5 {3 G* Z, G1 g, R2 d b
*/
. Z6 v+ H; m+ g7 `/ z4 ^- z
9 W( n% N6 Y# I$ x' o( y
asm(" nop");
4 j9 L. A5 n4 V& ?( z
1 @) a% |0 F# S, E9 Z0 r n
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( u4 S9 V& k# V' ?( Q, @; {6 l3 Y) v
}
) R3 A, J1 @$ }( `! m9 |
+ h8 P! N( y1 |
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( @. ?+ B+ {- |
//UARTprintf( "i=%d\n",i);
1 d7 l4 ^4 ~7 {( o& {
//UARTprintf( "j=%d\n",j);
; o( A' l! B" S" ]- W
UARTPuts("Data mismatch in buffers.\n",-2);
3 I8 b/ N& h' R) e' ]3 M
if (upp_interrupt_count == 2 && upp_error_count == 0)
) v8 y3 b# q. L
{
$ }/ J. F0 m& \% n" K! b1 b/ f
for (i = 0; i<upp_frame_size; i++)
3 U& u. L {0 @. V
{
! s/ a7 Z1 f, B" u7 p3 Z$ S# S' z
if (upp_buffer_a
!= upp_buffer_b
)
2 }& a) X( k% G7 o9 A$ N
{
, D" v/ u. M G+ t. T/ e% q
upp_error_count++;
1 D% d; i) `$ c# ^7 G3 y
}
% L9 [- O- B& W! @
}
! f+ ?! }" Y3 d
}
' X) G/ i) O' X" |; V* E
# z; s u8 C( W( B
/* 报告通信结果*/
- r" L" n8 r- V0 i3 U; O
if(upp_error_count != 0)
# A& h1 }# `8 Y5 ~3 p2 O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
8 J- u& l0 w" z8 f U1 h; n
else
* X( p! a3 ]! |; ]$ R; h& ^) W0 M4 K
UARTPuts("uPP transfers complete!\n",-2);
* s& P& y, v6 G& [) A9 K/ B! m
# W- K1 x7 m" ?$ A" N
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' u/ M& K% N. W. N0 D: U
UARTGets(ch,2);
- V$ J% J% R( E7 u, x5 v$ m* c) f# o6 M
UARTPuts("\n", -2);
5 t, {. J4 H! U {; b( j
& h* H" a$ r$ S
if(ch[0] == 'y')
" D' k2 m+ G3 A7 ?0 j
{
% Z \8 F+ @9 {, @4 Y
/*打印全部读到的数据*/
) b8 A- q6 R0 z5 Y
for(i=0; i<upp_frame_size; )
) i6 v- X% G7 Q3 S( p
{
6 v! x% Q- I% K5 L7 c& e" [
for(j=0; j<5; j++)
- z% U: ~+ Y1 j: A3 u$ n! B
{
/ |6 B/ G2 R5 `: U+ u* s; h
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ o- h, e' Y7 s# z6 t8 @ P
i++;
3 ]- k) t! B' \
//if(i >= 4096)
, j' V- d5 S+ H
// break;
; }. Y7 G9 E& ?
1 B7 a m. R3 s; i
}
; X2 e# [: |' H, b5 p
UARTPuts("\n",-2);
5 E7 g* h+ H4 Q* Z: s8 f6 i
}
_# r* w; E r. O w
}
7 o( o9 @7 }. t4 _
3 P5 {" c; Y" J9 h3 w; n
}
: ~" `8 [; v" t- q C$ T8 Z
: c9 E9 [- b5 c* p
: x4 C( I8 l% F
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ t+ Y7 d2 i- D/ A2 _& k/ B. z
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* z/ j# s. |: x6 q, S8 o& u) ?
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4