C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5917|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 j  _2 k5 `1 ~0 amain文件:3 b) Z# R+ Z8 w* B. g0 Q
interrupt void interrupt4(void)  
" `8 g/ x+ J- Q4 d5 e- q{
% ^( U6 `4 ?  J  Uint32 sample;4 j- a1 C7 B. h

; o; b; W# h9 z9 Z  O  sample = input_sample(); // read L + R samples from ADC
1 ~" T) X6 b$ j  j% f  output_sample(sample);   // write L + R samples to DAC
5 L5 `4 j* _  e) B  return;! x1 I/ U. v5 i9 C
}$ C2 T8 k0 h$ W7 Q7 H1 I5 p) b

) w3 H# h& [( G' |2 @/ Vint main( void ); }. F  H- _4 d
{
" F) {: K/ }3 }* u8 l- H( H$ }, c2 u% s* ^& R2 ~
    /* Initialize BSL */, Q2 W# G# W& j' P' b! _! k
    EVMC6747_init( );
" U# J3 V  C4 }' Y0 l        /* Call evmc6747_intr function */
' G' n* o! p2 t! L    aic3106_init( );
# l/ s' Z5 H4 u+ P9 P  E5 U        while(1);# Q9 L' A* X2 F8 j- Q6 j' X
}9 D  Y$ W& h) B
: t5 c" g5 Z$ c, X6 f, ~
5 _/ }1 e, B8 l' `2 e' b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 i& m7 ]; K9 F+ l* c
/* Initialize MCASP1 */
8 E$ M7 d7 L/ K4 h* n/ j    mcasp = &MCASP_MODULE_1;6 m$ B8 V7 o4 j
    mcasp->regs->GBLCTL  = 0;       // Reset
2 P1 w) K6 E+ G5 x  T( t    mcasp->regs->RGBLCTL = 0;       // Reset RX- R$ @* d" k# ^) i4 j6 l) N& `" ]
    mcasp->regs->XGBLCTL = 0;       // Reset TX* T7 s2 I3 k" Z( N+ k
    mcasp->regs->PWRDEMU = 1;       // Free-running; C0 L* |$ i+ k& Y
   // configure McASP0 receive registers+ L$ X  j+ ~0 V0 F3 w
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
9 ^7 \0 T# P4 F9 h9 r    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! U" }% C  M3 Z0 u8 c6 A
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! ~9 H7 ?; u$ q8 p6 a
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 i, L0 Q. _/ R/ |    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)9 T5 i; |5 B; a: L8 d0 |
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  \! F- [) z  ~) n4 ?' f: B0 C$ p+ X/ K
    mcasp->regs->RINTCTL    = 0x00000000; // Not used5 H1 g9 e$ `3 D4 T- O9 o* H/ {: k7 k
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 M* S7 B2 X) A( o% h4 Z: f
  y+ v8 J1 [7 w) t! D3 t7 Y) H
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' X4 _4 V. g0 D2 b. e  ?8 l    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 L) ~7 C+ [  M. B  l/ C5 H    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
* e+ r3 t; S4 E* b3 D- J2 j/ z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 T! O4 K" I& q. T6 z0 k: c: D
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
+ l' n" |% U; w/ t8 Y2 E    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
/ x% p/ l: [% L0 o8 ~3 r    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit* D4 |' ~' I9 @+ E  D
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( Y# W- c+ i# b7 p5 a9 B
4 }4 _, E4 [* P    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( \  b& j) n$ q7 c- W  ?9 k
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' ]& d. l& s( ^) `& D, u    mcasp->regs->PFUNC      = 0;          // All MCASPs
( S2 B! E" i  r7 b    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 E8 ]  {' r& a& Z. [8 L9 [5 Q7 Y1 |
9 e2 F8 h1 V+ _' U0 X8 @
    mcasp->regs->DITCTL     = 0x00000000; // Not used
2 e1 P4 ?" y' F$ E1 Z    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& p7 B, ~$ o# J) {5 z    mcasp->regs->AMUTE      = 0x00000000; // Not used
6 Z+ n; x& K4 b4 v  s( w. c6 `0 h$ e/ R0 W( V
/* Starting sections of the McASP*/
. n* p; L  \( x0 C0 b    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' C" q5 b4 ^  i3 ^8 m/ L' K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 a) P& V" b$ g" @5 R    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ D1 ~/ v; X; l' K: }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- S3 S  u6 J% N; z
9 ~# I7 _: B4 N) \    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ p1 j- s  ^+ C" J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 Z" a; x0 ~, Q. T% i- x! r
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; @0 I' F$ I- z6 R& l+ f0 r2 e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, [1 q0 T- b: D+ a7 o8 N  @: s1 {! p
    mcasp->regs->XSTAT = 0x0000ffff;
$ ?+ |( q3 m6 m8 |4 K# Q5 o; R    mcasp->regs->RSTAT = 0x0000ffff; # U8 e# g9 `( E! Q+ H, E

  Z7 x( n5 M$ {% k    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 G. i" e( A) l4 @/ l& L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; ], G% Y# o0 b2 y    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 H/ O3 p! U8 u" r% M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) G9 \) X6 Y1 ]! x& g# X" J

/ r; R% h; m0 v! u! l5 ?    /* Write a 0, so that no underrun occurs after releasing the state machine */4 f7 V" \% q' ?) d+ y, w  ^, P
    mcasp->regs->XBUF5 = 0;
, D7 ~& d5 H) n+ T$ t0 ~6 x6 t    mcasp->regs->RBUF0 = 0;' v- ]' r- e+ E, m
$ b) D2 I, m: m8 h6 S5 s
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- i( |$ f# Q9 s9 s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& D0 D$ S# F) W9 d! j; i) W* C    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ P6 Q3 S* x3 I. s- f    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
1 M8 r, T0 }) d( r; T9 {+ h- L2 ?" G4 d0 B% j
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
% C6 a, z1 e0 d) p0 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( I% @+ L; S, [9 R
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; , K( ~" }: w( I  \/ w. t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' B  t3 c3 f* Q# G6 \! @, F7 X' D1 f" E

. z1 ~: K8 `& x    CSR = 0x0000;* ~7 W8 F4 q9 F# X0 f8 p
    INTC_INTMUX1 = 0x3d;
/ X+ N* b- v  \' ~7 ]    ISTP = (unsigned int)vectors;7 @' l  N+ m  n' h0 H9 ]! z4 S
    ICR = 0xFFF0;  
, F1 E1 W3 `3 x    IER |= 0x12;  
9 @/ v) M: l% @    CSR |= 0x01;  
) G' Q3 _0 L6 j5 Y: y- a5 L" W" O( {# _2 f
. \( q5 R) f) A( Y
- L0 {8 W& ~( I( G% |1 Y$ Q6 K+ `; Z  n
还有就是两个输入输出函数:
; ?8 f- f2 C1 I1 i. _* Evoid output_sample(Int32 out_data)( u# y9 L7 c9 X& J. K9 o
{
% S/ r9 ?% y% _% R  AIC31_data.uint = out_data;  ! F1 N8 B) l# M
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
( A6 Z: a3 E' N2 r* ]7 C5 E}/ n+ q, J- H8 [3 v
1 Q4 X+ {7 v" H% r
Int32 input_sample(void)
" K& A7 y+ f$ C& b0 r# k. P/ Z{  ) z1 L: ^* ]' a, O2 {: ?
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 `; M, k. G4 P5 \7 G% R  return (AIC31_data.uint);
' s. ~2 ]4 L1 C+ n4 k' C$ S* r3 Y}
$ r, }; n5 i. t) f; ~
5 |) f  z0 o4 f4 {/ X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-1-3 02:23 , Processed in 0.040020 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表