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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: o" i, N9 h: T6 d
main文件:$ G: M2 n9 K- F) a0 f- e
interrupt void interrupt4(void)  ! a& \5 E2 T( U  i) X7 t$ X
{1 \6 W. T/ d2 L" Z
  Uint32 sample;8 [' |2 g9 \  Z" V9 R+ }; f
1 _$ O+ P+ j3 F1 V& U
  sample = input_sample(); // read L + R samples from ADC- G* T* W/ m+ J# M  w
  output_sample(sample);   // write L + R samples to DAC
3 E$ m5 u2 {5 b& V6 s' g- U1 s  return;
6 `) f# m6 e4 ~) e3 l2 g/ O7 c' z& G}
* K! b6 W! J& e1 v# H. V, A. d: T7 v1 r8 \" |5 [
int main( void )! C8 i. f0 s. ~
{# z' o& _) k. Y# {  |6 E  C

8 V) R: e' L" Y3 V, g9 X! N8 o/ }    /* Initialize BSL */  y+ v8 i" j6 S2 E, L
    EVMC6747_init( );
6 b: p" j8 K7 Y! E, T7 E2 M        /* Call evmc6747_intr function */
1 s: ?3 f; w" c! }" _5 D3 H    aic3106_init( );9 o' h7 M) q" d- L
        while(1);' t# a0 _7 H% l3 r
}( k4 ^7 R7 Y2 S3 i1 y
/ x* u0 U* w/ \2 ^: v5 a! j, O- o

3 h1 o; S* N" Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) u9 F! E& u3 `6 N4 }% ~( X/* Initialize MCASP1 */) F$ C) O$ L- Y: j0 y
    mcasp = &MCASP_MODULE_1;/ ]& c9 C% r1 z) x( I( [& A
    mcasp->regs->GBLCTL  = 0;       // Reset, J6 t5 [5 b8 T  x
    mcasp->regs->RGBLCTL = 0;       // Reset RX
- J0 U0 s! Y" q7 v! V0 [9 q- R    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 j: z! k1 t8 X: e$ o1 S( `    mcasp->regs->PWRDEMU = 1;       // Free-running4 q- X# E5 v5 Z5 V5 Q* U
   // configure McASP0 receive registers, _  S4 ^4 E$ [7 ^# j' b
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used. k2 K' T/ K+ a8 V% J# D) k- `
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& v- u1 A9 V: {' M3 {2 v. D    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 J+ ^/ J' {, U) @
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* T6 M( s) `. ^- [7 h; v
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
$ ~2 O6 p0 R5 F4 e8 V9 P8 l. [    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 S% ]; m- M5 }  l, D
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; I& z" U% p& z" B    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. U2 V4 x, I: o* a- N3 D/ e" n6 e7 k# I3 m# X; Y, D
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
9 k# T' p, A9 @. i8 Y) e% P8 Z    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; Q& b1 s7 w# Z7 |! t    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& K0 ^* s* T7 E" k$ ~, O: @* j0 G
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: c+ o* n# r' N4 {, i
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: H$ `# z4 J( O. f* G3 p8 I# P    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1% n) m( C5 a/ d+ \6 ~$ H$ P
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
' t% F; ^( j- u; y: `9 Z    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 P5 I# s+ K2 C! `4 Y% z3 v3 O, o1 O$ r. b% x
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( w2 k, G8 P8 P
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
4 t- g5 k2 x5 F) O5 a' T& ^) [' n    mcasp->regs->PFUNC      = 0;          // All MCASPs' |3 H. z* W9 Z% [
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 N* Q! z: G$ v0 L" Y; w) Z/ f0 l' a9 Z" E( F$ D# z- p
    mcasp->regs->DITCTL     = 0x00000000; // Not used
; A- ]* z' Y4 E3 r. m    mcasp->regs->DLBCTL     = 0x00000000; // Not used% @  F0 h! W7 x
    mcasp->regs->AMUTE      = 0x00000000; // Not used9 y  P" [0 u* q% H

2 U- l' q8 w/ R$ S- A- C% I/* Starting sections of the McASP*/1 f/ p1 t& }) G; y
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' B8 q3 P. b! h; i) N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  * n3 Q7 K6 M8 M5 H' B" h
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % ]  h4 U9 T. r. x+ G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 M1 f8 X8 \9 t9 @1 I
9 e' |/ r! t' O- Q: x9 e# E
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 s! y) l  x* @$ l6 V: a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* y' E: p% N! A3 b: d$ c    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
: v2 U5 x$ i2 Z# x0 p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; a; H# a" S4 V% K

/ O3 x2 Q# q8 E    mcasp->regs->XSTAT = 0x0000ffff;
4 }7 T7 h- z6 J9 ]: Z) r    mcasp->regs->RSTAT = 0x0000ffff; + d* @" X7 V" D: X3 a
7 ?7 e& I5 }6 l$ f# `5 w
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;4 R$ b! u6 G+ i* a- ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, `8 ]% E  C% v0 Z" u    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% K, x5 {! @0 \7 C) }$ s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 C" E" O  g1 k. o% F/ y+ S8 |/ s
7 ?) }" q  ]) w. ^6 I    /* Write a 0, so that no underrun occurs after releasing the state machine */4 b6 M" i. ?! ~$ K8 U
    mcasp->regs->XBUF5 = 0;7 \' W  j% A5 d, r9 @% X! M; k( }
    mcasp->regs->RBUF0 = 0;' m1 Y! ]1 U& F  E! x

0 ^5 N2 C6 @2 |8 A& @: M    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   ^3 n  d9 d8 b" x2 a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* j: L( ~  D" l0 n9 l+ {- g# @    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. @( W2 D& b5 @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 u# N% F$ Z8 Q# _8 m" I6 y

% q8 |4 y* Y6 T1 {' v* u    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( V6 J3 k6 ]6 k: W# E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. \8 p1 d( }# c- o0 J. {6 I
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 |) g& U3 s* M/ S7 U6 r+ M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' A2 x" D. g9 k, [, J# k/ E/ k( C3 D1 b. |* i' S
    CSR = 0x0000;' f6 w- P  n/ M
    INTC_INTMUX1 = 0x3d;
+ Y) m- E5 \% D* q8 y, \* T    ISTP = (unsigned int)vectors;, B1 U$ g; E5 B5 d
    ICR = 0xFFF0;  8 t9 A* |  x8 b4 A
    IER |= 0x12;  / w3 F* j* _4 N7 _
    CSR |= 0x01;  
* Y; [0 V! |$ l7 Z, L. @2 z
. R8 W* j" W6 l( |( C9 g8 H2 C0 A# H1 n0 }' B' A6 k4 _
( L+ T! o# Q) O2 C% d0 S. r) P3 \$ J
还有就是两个输入输出函数:1 m1 B6 U' O, j/ u$ I. L1 b0 [
void output_sample(Int32 out_data)
% i5 n0 a# ]; `" R$ U( `{
& {; \' U/ M$ ~" {. T  AIC31_data.uint = out_data;  + l$ {4 Q7 m9 C
  MCASP1_XBUF5_32BIT = AIC31_data.uint;; C6 D& D! V1 N& G
}
& H% }; k/ w1 F! g9 e1 b. y  }6 V4 D( e  T3 `2 |; |6 S
Int32 input_sample(void)
3 P! u/ k/ l$ a# f4 {5 T{  
+ O! E8 D5 P3 j3 [4 a  AIC31_data.uint = MCASP1_RBUF0_32BIT;2 e. X: n& M! v4 a
  return (AIC31_data.uint);+ K" V0 G3 e7 J0 f0 E+ `. D7 b2 e' B
}
7 Q1 y/ ?7 W4 Q0 [* X% b  K
9 ^" A1 z! q( w2 u& t
分享到:  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-12 22:14 , Processed in 0.040741 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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