C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 r" Y' W4 {; N  y* @1 {main文件:
7 w8 A- Z; B4 u8 ginterrupt void interrupt4(void)  6 P$ }5 v6 H- p
{
+ x5 z, S/ e# y8 \7 Z) [  Uint32 sample;) e4 h8 S. F* N4 y4 x

7 Z1 N6 t9 d5 e" u/ u4 {" n6 f  sample = input_sample(); // read L + R samples from ADC
' _$ d; `4 R1 I7 W/ V  f" u  output_sample(sample);   // write L + R samples to DAC
2 k- ]0 J: [( E* q$ Y, n  return;
, X' n  s' t4 Y) n2 o& F3 F}4 e3 g, l# N, x; B" g# D8 S* i$ X

: v; J  o# c) P3 Jint main( void )1 _. w& E3 V% R$ N# |
{
; M1 k, A4 C+ t% D# T
1 _! T& O& |; L: W# u    /* Initialize BSL */
4 J4 g# H' ^& I3 K8 e. V7 {    EVMC6747_init( );; `% G3 o! T2 `9 `; ]" l
        /* Call evmc6747_intr function */
1 ~- k" V1 A- q    aic3106_init( );- ~7 c% e  {6 o4 o- j
        while(1);: l  g: q. I" O2 u! Y1 g! m8 ~
}
$ ~- Y- p! H, Y9 n! T& \$ Q% G! E5 R' [, H. l

$ ~( _7 U4 y! qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 C' i' D3 r- _/ x/* Initialize MCASP1 */
/ A  N6 X2 S2 m% v$ B) P1 p! U9 `    mcasp = &MCASP_MODULE_1;
2 |1 L; [; E8 }  c  ~    mcasp->regs->GBLCTL  = 0;       // Reset2 }. h) a+ e& G# @- O
    mcasp->regs->RGBLCTL = 0;       // Reset RX" }0 P# k9 I7 u# v) ^  k7 W
    mcasp->regs->XGBLCTL = 0;       // Reset TX
1 k- z" H% N7 F. H    mcasp->regs->PWRDEMU = 1;       // Free-running/ s' O/ Y% s. x6 L! H: k3 g
   // configure McASP0 receive registers; G5 p. f8 e' v* S4 E! r# T
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used7 I5 h( R* A0 G' C
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- _! d0 l# o) y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 V! X3 e' D2 k; c" q5 K
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
! w- j5 w0 y4 _3 w4 f" x' X    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
- i& w4 Y( O2 `" |- j3 E. h    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: b1 n' c& O  e. g; x7 @
    mcasp->regs->RINTCTL    = 0x00000000; // Not used- b% ^- A7 N9 G9 s
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ s5 A( x9 n/ J- Q" q5 A! G3 O; x7 r" B
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 ^# F5 U, Z- Q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( e; I0 E5 X9 M: P
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 |0 j# [# G+ X5 c/ v+ g; I4 u  `6 w
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 J5 r) w7 T: O# u    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: A  R' f) L6 A/ E
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
# \7 r2 x) ~3 o% S8 m    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit$ i, m* O( {3 Z8 K. h
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 [. k! M8 J+ T6 X5 s0 \/ O
4 E& d1 B0 `' m0 D" A7 _' b& S& ?
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN2 [2 y9 A# q2 `" I
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
! J# t7 D7 f" s( _    mcasp->regs->PFUNC      = 0;          // All MCASPs
" h6 ]5 @5 d) u& \4 _4 Z* x    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! R# A5 `! d5 O) g; N! l. X0 f! ^2 x' t2 I* J& y) o8 p5 y
    mcasp->regs->DITCTL     = 0x00000000; // Not used
- m1 C0 t! R$ w( U/ Z    mcasp->regs->DLBCTL     = 0x00000000; // Not used
6 ~7 z2 |) [3 c3 ^+ H" u0 v    mcasp->regs->AMUTE      = 0x00000000; // Not used
- L4 ]0 @- j4 l, ^* q
# F& Y7 j  N: j/* Starting sections of the McASP*/" Z8 f/ ], s2 _2 _# U/ p5 e
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 v6 c3 @, j* q. Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ w& X0 c8 m) D9 _, g* w, K8 P
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 v  {( J: V9 V. W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ u3 x2 }8 l7 U3 d7 f

7 ~" Y  h0 Y  u2 S" y& ?6 e: N    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; . c' O( _" H9 y' M7 R# k! x) j0 L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( h2 ^1 n6 L! J, z0 Q7 I8 E
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* T$ t) Y" d* g0 A9 U8 U' n7 K7 X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 I, }% C  z& A9 G( K
& C/ W! l, Q: G$ }/ }6 S
    mcasp->regs->XSTAT = 0x0000ffff; 2 j6 ]  O: v& P
    mcasp->regs->RSTAT = 0x0000ffff; ; z$ l! T5 r4 Y& T+ m/ [- y

7 G* u( F9 H' ]: n' Y& A: d    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, r6 v# b5 e; v4 r6 {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );' i* H+ Y# {- S
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
' o$ G# ~. ^. H7 l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );$ C: z) i- ?1 W0 y* m7 D% x7 h2 ?

: }4 e- z6 M$ Q" m( W8 h$ g    /* Write a 0, so that no underrun occurs after releasing the state machine */
- {( x6 \0 y- S  W* L: T% j! y    mcasp->regs->XBUF5 = 0;
4 y6 x5 W" b% k( X) c& p. g    mcasp->regs->RBUF0 = 0;, _% X6 @; w5 R! F2 _8 @# c
' u" O$ u7 f+ g) ~& d. K9 c
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   J* \0 o2 F0 ?' L4 [7 X9 y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 q" E$ }, z5 v/ ~& x0 e( K' w. }
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! f* N7 P5 R  P7 M; B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- w* h/ j3 I1 A9 Z/ b1 A
, q. K* P3 a5 S& b    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, X5 r0 i% j" Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
9 l9 g; B& I% A6 l2 q  T    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * ]+ H- g( p: E* U& L. }4 U( l0 u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( {; i: V% O3 _

9 L! y: a. R- E% y$ G    CSR = 0x0000;' i- O+ l5 H$ S2 l+ A0 \
    INTC_INTMUX1 = 0x3d;" e" \1 _! E* J1 Y5 u
    ISTP = (unsigned int)vectors;
7 B: a  V) l6 @: Q/ i    ICR = 0xFFF0;  . z$ q. e) c7 \
    IER |= 0x12;  % B! p! ?( g* h- \' g% a' I
    CSR |= 0x01;  
% A/ \3 Z' Y/ Q' F( q$ l3 T) ]" L. ?
' [, U  {/ K5 D5 T9 H  [$ v

! n  G& u- x" Y* e4 k3 b/ R; M# h还有就是两个输入输出函数:5 K$ n2 \: U, R1 l! M* Z
void output_sample(Int32 out_data); ]! m8 w7 U" m" n
{
; j' T- t  ~: x! x/ a+ M  AIC31_data.uint = out_data;  2 ^* z' Q/ e3 s) g% Q2 M
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
' U9 e  ^: m7 x7 u}( Y% M/ D. L, p2 t0 q3 J
2 u$ f' t2 S4 m  A4 ~0 q
Int32 input_sample(void)
2 n7 [7 j  _5 |3 C{  * i+ }2 S, \* `) u' r- Y
  AIC31_data.uint = MCASP1_RBUF0_32BIT;  T# [0 N4 s# d5 t2 l" y- Y/ \7 S
  return (AIC31_data.uint);
. B3 c8 I+ n6 p8 R# d7 Q}) Y' k9 V9 I. j9 M3 W; m$ c

5 t) c, b6 p+ q8 ^2 Y. `/ e
分享到:  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-3-16 12:25 , Processed in 0.042623 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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